[爆卦]php json取值是什麼?優點缺點精華區懶人包

為什麼這篇php json取值鄉民發文收入到精華區:因為在php json取值這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者shadowjohn (羽山)看板Ajax標題Re: [問題] 去除JSON中重複的值再新增到網...


※ 引述《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 就可以變的漂亮簡單 :)


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.134.48.253
※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1448260633.A.00C.html
※ 編輯: shadowjohn (140.134.48.253), 11/23/2015 14:41:54
flirmnave: 感謝您的回答 我會試試看的!! 11/23 23:06

你可能也想看看

搜尋相關網站