json decode 过滤某项数据重复。

如何在json decode时,检索 name 项不重复?然后输出整项的 name 和 id 的值。

JSON树,保存在外部文件里,结构。

C# code

[
{"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代码

PHP code

// 一些 curl 分析上面JSON树文件的代码
$json = json_decode($body, true);
foreach ($json['data'] as $data) {
  echo $data['name'].'<br />';
  echo $data['id'].'<br />';
}



考虑过用 array_unique 函数,

PHP code
$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 里使用? 或者用别的缓存数组方法,可以实现我的要求? 
求可行的代码。谢谢大家。

作者: changjay   发布时间: 2011-06-13

PHP code
$json = json_decode($body, true);
$dict = array();
foreach ($json['data'] as $data) {
  if(! in_array($name, $dict)) {
    echo $data['name'].'<br />';
    echo $data['id'].'<br />';
    $dict[] = $data['name'];
  }
}


作者: xuzuning   发布时间: 2011-06-13

PHP code
$arr = array(
    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));

作者: kyzy_yy_pm   发布时间: 2011-06-13

PHP code
$arr = array(
    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));

作者: kyzy_yy_pm   发布时间: 2011-06-13