如何在json decode时,检索 name 项不重复?然后输出整项的 name 和 id 的值。JSON树,保存在外部文件里,结构。
[
{"name":"wang","id":"101"},
{"name":"zhao","id":"201"},
{"name":"zhang","id":"103"},
{"name":"xu","id":"106"},
{"name":"zhou","id":"107"},
{"name":"wang","id":"18"}, //wang已经有过,不输出
{"name":"xu","id":"92"}, //xu已经出现过,跳过输出
{"name":"yi","id":"15"}
]
PHP代码
// 一些 curl 分析上面JSON树文件的代码
$json = json_decode($body, true);
foreach ($json['data'] as $data) {
echo $data['name'].'<br />';
echo $data['id'].'<br />';
}
考虑过用 array_unique 函数,$names = Array();
foreach ($json['data'] as $data) {
$names[] = $data['name'];
//$id[] = $data['id'];
}
$names = array_unique($names); // id封装在 array_unique,检索不出重复项了
foreach ($names as $name) {
echo $name; // 可以输出所有不重复的 name 值
// echo $id; // $id 没有被封装到 新的foreach里 被无视了
// echo $data['id']; //$data['id']是上一个foreach的产物,永远只输出上一个foreach的最后一项值
}看来简单的 array_unique 函数不能解决问题,求助大家。
是否把 array_unique 封装到 class 或者function 里使用? 或者用别的缓存数组方法,可以实现我的要求?
求可行的代码。谢谢大家。
[
{"name":"wang","id":"101"},
{"name":"zhao","id":"201"},
{"name":"zhang","id":"103"},
{"name":"xu","id":"106"},
{"name":"zhou","id":"107"},
{"name":"wang","id":"18"}, //wang已经有过,不输出
{"name":"xu","id":"92"}, //xu已经出现过,跳过输出
{"name":"yi","id":"15"}
]
PHP代码
// 一些 curl 分析上面JSON树文件的代码
$json = json_decode($body, true);
foreach ($json['data'] as $data) {
echo $data['name'].'<br />';
echo $data['id'].'<br />';
}
考虑过用 array_unique 函数,$names = Array();
foreach ($json['data'] as $data) {
$names[] = $data['name'];
//$id[] = $data['id'];
}
$names = array_unique($names); // id封装在 array_unique,检索不出重复项了
foreach ($names as $name) {
echo $name; // 可以输出所有不重复的 name 值
// echo $id; // $id 没有被封装到 新的foreach里 被无视了
// echo $data['id']; //$data['id']是上一个foreach的产物,永远只输出上一个foreach的最后一项值
}看来简单的 array_unique 函数不能解决问题,求助大家。
是否把 array_unique 封装到 class 或者function 里使用? 或者用别的缓存数组方法,可以实现我的要求?
求可行的代码。谢谢大家。
array('name' => 'a', 'id' => 1),
array('name' => 'a', 'id' => 2),
array('name' => 'c', 'id' => 3),
array('name' => 'c', 'id' => 4),
array('name' => 'e', 'id' => 5),
array('name' => 'f', 'id' => 6),
);$json = json_encode($arr);function decode_json($json, $assoc = true){
if(!$json){
return null;
}
$decode = json_decode($json, $assoc);
$return = array();
foreach($decode as $val){
$return[$val['name']] = $val;
}
return $return;
}echo '<pre>';print_r(decode_json($json));
array('name' => 'a', 'id' => 1),
array('name' => 'a', 'id' => 2),
array('name' => 'c', 'id' => 3),
array('name' => 'c', 'id' => 4),
array('name' => 'e', 'id' => 5),
array('name' => 'f', 'id' => 6),
);$json = json_encode($arr);function decode_json($json, $assoc = false){
if(!$json){
return null;
}
$decode = json_decode($json, $assoc);
$return = array();
foreach($decode as $val){
if(is_object($val)){
settype($val, 'array');
}
$return[$val['name']] = $val;
}
unset($decode);
return $return;
}echo '<pre>';print_r(decode_json($json));
<?php
$json = <<<EOT
[
{
"name": "wang",
"id": "101"
},
{
"name": "zhao",
"id": "201"
},
{
"name": "zhang",
"id": "103"
},
{
"name": "xu",
"id": "106"
},
{
"name": "zhou",
"id": "107"
},
{
"name": "wang",
"id": "18"
},
{
"name": "xu",
"id": "92"
},
{
"name": "yi",
"id": "15"
}
]
EOT;function decode_json($json, $assoc = false){
if(!$json){
return null;
}
$decode = json_decode($json, $assoc);
$return = array();
foreach($decode as $val){
if(is_object($val)){
settype($val, 'array');
}
$return[$val['name']] = $val;
}
unset($decode);
return $return;
}echo '<pre>';print_r(decode_json($json));
?>
<?php
$body = <<<EOT
[
{
"name": "wang",
"id": "101"
},
{
"name": "zhao",
"id": "201"
},
{
"name": "zhang",
"id": "103"
},
{
"name": "xu",
"id": "106"
},
{
"name": "zhou",
"id": "107"
},
{
"name": "wang",
"id": "18"
},
{
"name": "xu",
"id": "92"
},
{
"name": "yi",
"id": "15"
}
]
EOT;
$json = json_decode($body, true);
$dict = array();
foreach ($json as $data) {
if(! in_array($name, $dict)) {
$dict[] = $data['name'];
echo $data['name'].'<br />';
echo $data['id'].'<br />';
}
}?>
/*
输出:Array
(
[a] => Array
(
[name] => a
[id] => 2
) [c] => Array
(
[name] => c
[id] => 4
) [e] => Array
(
[name] => e
[id] => 5
) [f] => Array
(
[name] => f
[id] => 6
))
*/
$json = <<<json
[
{
"name": "wang",
"id": "101"
},
{
"name": "zhao",
"id": "201"
},
{
"name": "zhang",
"id": "103"
},
{
"name": "xu",
"id": "106"
},
{
"name": "zhou",
"id": "107"
},
{
"name": "wang",
"id": "18"
},
{
"name": "xu",
"id": "92"
},
{
"name": "yi",
"id": "15"
}
]
json;function decode_json($json, $assoc = false){
if(!$json){
return null;
}
$decode = json_decode($json, $assoc);
$return = array();
foreach($decode as $val){
if(is_object($val)){
settype($val, 'array');
}
$return[$val['name']] = $val;
}
unset($decode);
return $return;
}echo '<pre>';print_r(decode_json($json));//输出结果:
Array
(
[wang] => Array
(
[name] => wang
[id] => 18
) [zhao] => Array
(
[name] => zhao
[id] => 201
) [zhang] => Array
(
[name] => zhang
[id] => 103
) [xu] => Array
(
[name] => xu
[id] => 92
) [zhou] => Array
(
[name] => zhou
[id] => 107
) [yi] => Array
(
[name] => yi
[id] => 15
))
$dict = array();
foreach ($json as $data) {
if(! in_array($data['name'], $dict)) {
echo $data['name'].'<br />';
echo $data['id'].'<br />';
$dict[] = $data['name'];
}
}