重建json数据,删除一个子节点中的重复值


Rebuild a json data remove duplicate value in one child node

以下是一些json数据:

[
  {"a":"abc","b:":"10"},//"a":"abc"
  {"a":"abd","b:":"12"},
  {"a":"abc","b:":"14"},//"a":"abc"
  {"a":"abe","b:":"15"},
  {"a":"abf","b:":"16"},
  {"a":"abg","b:":"17"},//"a":"abg"
  {"a":"abg","b:":"19"}//"a":"abg"
]

我想删除子节点"a"中的所有重复值(保留第一个出现的值)。

输出=>

[
  {"a":"abc","b:":"10"},//first appear "a":"abc"
  {"a":"abd","b:":"12"},
  {"a":"abe","b:":"15"},
  {"a":"abf","b:":"16"},
  {"a":"abg","b:":"17"}//first appear "a":"abg"
]

这是经过测试的,并且看起来像您所描述的那样工作:

$json = <<<JSON
[
{"a":"abc","b:":"10"},
{"a":"abd","b:":"12"},
{"a":"abc","b:":"14"},
{"a":"abe","b:":"15"},
{"a":"abf","b:":"16"},
{"a":"abg","b:":"17"},
{"a":"abg","b:":"19"}
]
JSON;
$json_array = json_decode( $json, TRUE );
$new_array = array();
$exists    = array();
foreach( $json_array as $element ) {
    if( !in_array( $element['a'], $exists )) {
        $new_array[] = $element;
        $exists[]    = $element['a'];
    }
}
print json_encode( $new_array );

它输出[{"a":"abc","b:":"10"},{"a":"abd","b:":"12"},{"a":"abe","b:":"15"},{"a":"abf","b:":"16"},{"a":"abg","b:":"17"}],我相信它与您想要的输出相匹配。