※ 引述《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 就可以变的漂亮简单 :)