Re: [問題] 去除JSON中重複的值再新增到網頁上

作者: shadowjohn (轉角遇到愛)   2015-11-23 14:37:09
※ 引述《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 就可以變的漂亮簡單 :)
作者: flirmnave (焰離雨星)   2015-11-23 23:06:00
感謝您的回答 我會試試看的!!

Links booklink

Contact Us: admin [ a t ] ucptt.com