首頁 >後端開發 >php教程 >為什麼「json_encode」將稀疏 PHP 陣列轉換為 JSON 物件?

為什麼「json_encode」將稀疏 PHP 陣列轉換為 JSON 物件?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-21 07:53:08708瀏覽

Why Does `json_encode` Convert Sparse PHP Arrays to JSON Objects?

在 json_encode 中編碼為 JSON 物件的稀疏數組

當數組包含缺失索引時,它被稱為稀疏數組。預設情況下,json_encode 將稀疏數組處理為 JSON 物件而不是數組。這可能會導致在各種情況下出現意外行為。

陣列到物件轉換的原因

JSON 語法不支援缺少索引的陣列。當 json_encode 遇到稀疏數組時,它會假設它是一個物件並進行相應的轉換。

範例

考慮以下程式碼:

$a = array(
    new stdClass,
    new stdClass,
    new stdClass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

// First JSON encoding
echo json_encode($a) . "\n";

// Unset an element
unset($a[1]);

// Second JSON encoding
echo json_encode($a) . "\n";

輸出

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}

輸出

預防

防止此行為並確保數組編碼一致,您可以在將數組傳遞給 json_encode 之前使用 array_values() 重新索引數組。這將刪除數組中的任何漏洞,並確保 json_encode 將其視為數組。

echo json_encode(array_values($a)) . "\n";
修改後的程式碼

此修改後的程式碼將始終將 $a 編碼為一個 JSON 數組,無論它是否缺少索引。

以上是為什麼「json_encode」將稀疏 PHP 陣列轉換為 JSON 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn