首頁 > 後端開發 > php教程 > 為什麼 PHP 的 `json_encode` 會將稀疏數組轉換為 JSON 物件?

為什麼 PHP 的 `json_encode` 會將稀疏數組轉換為 JSON 物件?

Barbara Streisand
發布: 2024-11-27 08:50:10
原創
492 人瀏覽過

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

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板