json_encode 將稀疏數組編碼為JSON 物件
當JSON 編碼稀疏數組(即缺少索引的數組)時,PHP 的函數會顯示意外行為,將陣列轉換為JSON 物件而不是陣列。為了理解這種行為,讓我們來看一個例子:
$a = array( new stdClass, new stdClass, new stdClass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; printf("%s\n", json_encode($a)); unset($a[1]); printf("%s\n", json_encode($a));
輸出:
[{ "abc": "123" },{ "jkl": "234" },{ "nmo": "567" }] { "0": { "abc": "123" }, "2": { "nmo": "567" } }
在初始編碼中,json_encode 產生一個物件數組,因為稀疏數組作為物件是有效的。但是,在刪除未設定的索引 (1) 後,產生的陣列無法編碼為數組,因為它現在有一個洞。
要解決此問題並確保數組保持編碼為數組,請使用array_values ($a) 編碼前:
printf("%s\n", json_encode(array_values($a)));
[{ "abc": "123" },{ "nmo": "567" }]
透過使用array_values 重新索引數組,任何間隙都會被刪除,從而使json_encode 能夠成功產生一個有效的JSON 陣列。
以上是為什麼 PHP 的 `json_encode` 會將稀疏數組轉換為 JSON 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!