Tasusunan Jarang Dikodkan sebagai Objek JSON dalam json_encode
Apabila tatasusunan mengandungi indeks yang tiada, ia dikenali sebagai tatasusunan jarang. json_encode, secara lalai, mengendalikan tatasusunan jarang sebagai objek JSON dan bukannya tatasusunan. Ini boleh membawa kepada tingkah laku yang tidak dijangka dalam pelbagai senario.
Punca Penukaran Tatasusunan ke Objek
Sintaks JSON tidak menyokong tatasusunan dengan indeks yang tiada. Apabila json_encode menemui tatasusunan jarang, ia menganggap ia sebagai objek dan menukarnya dengan sewajarnya.
Contoh
Pertimbangkan perkara berikut kod:
$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";
Output
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}] {"0":{"abc":"123"},"2":{"nmo":"567"}}
Dalam pengekodan pertama, tatasusunan ditukar kepada tatasusunan JSON seperti yang dijangkakan. Walau bagaimanapun, selepas menyahset indeks 1, pengekodan kedua menghasilkan objek JSON disebabkan isu tatasusunan yang jarang berlaku.
Pencegahan
Untuk menghalang tingkah laku ini dan memastikan pengekodan tatasusunan yang konsisten , anda boleh menggunakan array_values() untuk mengindeks semula tatasusunan sebelum menghantarnya ke json_encode. Ini akan mengalih keluar sebarang lubang dalam tatasusunan dan memastikan ia dianggap sebagai tatasusunan oleh json_encode.
Kod Diubahsuai
echo json_encode(array_values($a)) . "\n";
Kod yang diubah suai ini akan sentiasa mengekod $a sebagai tatasusunan JSON, tidak kira sama ada ia mempunyai indeks yang hilang atau tidak.
Atas ialah kandungan terperinci Mengapakah `json_encode` Menukar Tatasusunan PHP Jarang kepada Objek JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!