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
Lepaskan: 2024-11-27 08:50:10
asal
508 orang telah melayarinya

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));
Salin selepas log masuk

Output:

[{
    "abc": "123"
},{
    "jkl": "234"
},{
    "nmo": "567"
}]
{
    "0": {
        "abc": "123"
    },
    "2": {
        "nmo": "567"
    }
}
Salin selepas log masuk

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)));
Salin selepas log masuk
[{
    "abc": "123"
},{
    "nmo": "567"
}]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan