Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah `json_encode` PHP Menukar Tatasusunan Jarang kepada Objek JSON?

Mengapakah `json_encode` PHP Menukar Tatasusunan Jarang kepada Objek JSON?

Barbara Streisand
Barbara Streisandasal
2024-11-27 08:50:10520semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn