json_encode Mengekod Tatasusunan Jarang sebagai Objek JSON
Apabila JSON mengekod tatasusunan jarang (iaitu tatasusunan dengan indeks yang tiada), fungsi json_encode PHP mempamerkan tingkah laku yang tidak dijangka, menukar tatasusunan menjadi objek JSON dan bukannya tatasusunan. Untuk memahami tingkah laku ini, mari kita periksa contoh:
$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));
Output:
[{ "abc": "123" },{ "jkl": "234" },{ "nmo": "567" }] { "0": { "abc": "123" }, "2": { "nmo": "567" } }
Dalam pengekodan awal, json_encode menghasilkan tatasusunan objek memandangkan tatasusunan jarang itu sah sebagai objek . Walau bagaimanapun, selepas mengalih keluar indeks (1) dengan tidak ditetapkan, tatasusunan yang terhasil tidak boleh dikodkan sebagai tatasusunan kerana ia kini mempunyai lubang.
Untuk menyelesaikan isu ini dan memastikan tatasusunan kekal dikodkan sebagai tatasusunan, gunakan nilai_tatasusunan ($a) sebelum pengekodan:
printf("%s\n", json_encode(array_values($a)));
[{ "abc": "123" },{ "nmo": "567" }]
Dengan mengindeks semula tatasusunan dengan array_values, sebarang jurang dialih keluar, membenarkan json_encode berjaya menghasilkan tatasusunan JSON yang sah.
Atas ialah kandungan terperinci Mengapakah `json_encode` PHP Menukar Tatasusunan Jarang kepada Objek JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!