[請益] php 處理 json array unset 變成 object

作者: junktw (這是唉滴)   2016-02-28 22:50:29
<?php
$raw_data = '{"status":"ok","data":{"rdata":[{"r1":"1","a1":"3323"},{"r1":"255","a1":"332443"} ]}}';
$json_obj = json_decode($raw_data);
$r_data = '{"r10":"1","a1":"3323"}';
$r_data_obj = json_decode($r_data);
foreach($json_obj->data->rdata as $key=>$tag_name){
if($tag_name->r1 == "1"){
//unset($json_obj->data->rdata[$key]);
}
}
$json_obj->data->rdata[] = $r_data_obj;
print_r($json_obj);
echo json_encode($json_obj);
code好讀板 http://pastebin.com/4Kg7hrdJ
json 經過 unset 處理過後就會 json_encode 輸出就自動變成 object
可是 print_r 還是 array
作者: ns1234 (FAR)   2016-02-28 23:20:00
第二個參數要加true吧(印象中) 官方文件應該有寫原來是問encode,我說的是decode...sorry我猜是他在php就真的是陣列,只是encode因為是大括號所以被當物件
作者: Kenqr (function(){})()   2016-02-29 01:31:00
假如php array的size是n,index必須是0 ~ n-1,json_encode時才能轉成array,否則會轉成object。因為json的array index 只能是0 ~ n-1你的rdata的index是1和2,所以沒辦法轉成json array
作者: junktw (這是唉滴)   2016-02-29 13:26:00
Kenqr 說的正解,我後面用 sort() 也發現是 index 問題
作者: ns1234 (FAR)   2016-02-29 13:41:00
原來如此,感謝分享
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-03-01 19:31:00
這是json的一個老陷阱 可以使用array_merge()來解決
作者: knives   2016-03-03 17:09:00
可以用array_splice 或是array_diff

Links booklink

Contact Us: admin [ a t ] ucptt.com