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

看板PHP作者 (這是唉滴)時間8年前 (2016/02/28 22:50), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/1
<?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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.55.111 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1456671032.A.5A7.html

02/28 23:20, , 1F
第二個參數要加true吧(印象中) 官方文件應該有寫
02/28 23:20, 1F

02/28 23:23, , 2F
原來是問encode,我說的是decode...sorry
02/28 23:23, 2F

02/28 23:25, , 3F
我猜是他在php就真的是陣列,只是encode因為是大括號所以
02/28 23:25, 3F

02/28 23:25, , 4F
被當物件
02/28 23:25, 4F

02/29 01:31, , 5F
假如php array的size是n,index必須是0 ~ n-1,json_encode
02/29 01:31, 5F

02/29 01:31, , 6F
時才能轉成array,否則會轉成object。
02/29 01:31, 6F

02/29 01:32, , 7F
因為json的array index 只能是0 ~ n-1
02/29 01:32, 7F

02/29 01:33, , 8F
你的rdata的index是1和2,所以沒辦法轉成json array
02/29 01:33, 8F

02/29 13:26, , 9F
Kenqr 說的正解,我後面用 sort() 也發現是 index 問題
02/29 13:26, 9F

02/29 13:41, , 10F
原來如此,感謝分享
02/29 13:41, 10F

03/01 19:31, , 11F
這是json的一個老陷阱 可以使用array_merge()來解決
03/01 19:31, 11F

03/03 17:09, , 12F
可以用array_splice 或是array_diff
03/03 17:09, 12F
文章代碼(AID): #1MqmauMd (PHP)