※ 引述《flirmnave (焰离雨星)》之铭言:
: 大家好
: 利用PHP由来源取得资料后 以JSON回传
: JSON大致长这样
: http://www.jsoneditoronline.org/?id=7d7865f63885c57fc18765b0c0bfa7ef
: 然后要利用那些资料append到网页上
: 而问题就在 取回来的资料是有重复的
: 例如上面的网址所呈现的JSON有三笔资料
: 但有两笔是一样的
: 想要让他变成不重复的资料该怎么做呢??
: 我有找到 unique() 这个方法
: 目前的作法是 大致是以下
: success: function(jsonData) {
:     var jsonList = jsonData.CourseList;  //传入的JSON
:     var jsonLength = jsonData.CourseList.length; //取JSON的长度
:     var jsonInput = new Array(jsonLength);  //新增空阵列
:     for (var i = 0; i < jsonLength; i++) {  //将JSON中的id复制到新阵列
:         jsonInput[j] = jsonList[i]["id"];
:     }
:     jsonInput = $.unique(jsonInput);  //利用 unique() 去除重复值
:     //最后用没有重复值的 jsonInput 进行 append
: 但是用这个方法 JSON 里的 credit 就不见了
: 只剩下 id
: 想请大家指点一下方向
: 该怎么做才有办法达成想要的效果呢?
: 感谢大家
虽然有点复杂,不过从 php 下手的方式给你参考
<?php
  $a = '
 {
  "CourseList": [
    {
      "id": "6217",
      "credit": "4"
    },
    {
      "credit": "4",
      "id": "6217"
    },
    {
      "id": "41741",
      "credit": "3"
    }
  ]
}
';
 $ma= json_decode($a,true);
 $ma["CourseList"]=array_map(function($values) use (&$arr){
                          return json_decode($values,true);
                   },array_values(array_unique(array_map(json_encode,
                                  array_map(function($values) use (&$arr){
                                        asort($values);
                                        return $values;
                                 },$ma["CourseList"])))));
 //print_r($ma)
 echo json_encode($ma,true);
 php w.php
 {
   "CourseList":
        [
           {"credit":"4","id":"6217"},
           {"credit":"3","id":"41741"}
        ]
 }
 我都看不懂我在写什么了 :D
 总之就是把你的 CourseList 里的 array 先把 key sort 一下
 转成 json string ,然后才去作 unique、重新定义array id 最后再反转 json 回阵列
 组出新的阵列内容
 稍复杂了点,不好维护
 因为整个内容都变json_string来比,所以一定要完全相同才会滤掉
 如果只是要针对某个字段如 id ,把 array_unique 改一下
 http://php.net/manual/en/function.array-unique.php
 参考有人写好现成的 unique_multidim_array
 会更简单一点
 另外用 array_map 是因为 json_decode 要强制以 array 方式出,不想用 stdclass
 另外再写一个json_decode_array 的function 就可以变的漂亮简单 :)