Rumah > pembangunan bahagian belakang > masalah PHP > Bagaimana untuk mencapai tatasusunan php json_encode tanpa penukaran

Bagaimana untuk mencapai tatasusunan php json_encode tanpa penukaran

PHPz
Lepaskan: 2023-04-21 09:54:54
asal
691 orang telah melayarinya

Fungsi json_encode dalam PHP menukar pembolehubah PHP kepada rentetan dalam format JSON. Yang paling biasa ialah menukar tatasusunan dalam PHP kepada rentetan berformat JSON. Walau bagaimanapun, dalam beberapa kes anda mungkin mahu fungsi json_encode tidak menukar tatasusunan. Dalam artikel ini, kami akan meneroka bagaimana untuk mencapai matlamat ini.

Pertama, mari kita lihat cara fungsi json_encode menukar tatasusunan secara lalai. Katakan kita mempunyai tatasusunan PHP berikut:

$array = array(
    "name" => "John",
    "age" => 30,
    "hobbies" => array("reading", "swimming", "traveling")
);
Salin selepas log masuk

Apabila kita menghantar tatasusunan ini ke fungsi json_encode, fungsi tersebut akan mengembalikan rentetan berformat JSON berikut:

{
    "name": "John",
    "age": 30,
    "hobbies": ["reading", "swimming", "traveling"]
}
Salin selepas log masuk

Seperti yang anda lihat , Fungsi ini telah menukar nilai kunci "hobi" daripada subarray PHP kepada tatasusunan JSON. Ini berguna dalam kebanyakan kes kerana ia memberikan kami cara untuk menukar data PHP secara rekursif kepada format JSON lapisan demi lapisan.

Walau bagaimanapun, dalam beberapa kes kami mahu fungsi json_encode tidak menukar tatasusunan tetapi mengekalkannya sebagai tatasusunan PHP asal. Terdapat cara untuk mencapai ini dan itu adalah dengan menggunakan ruang letak khas dalam tatasusunan.

Kami boleh menggantikan setiap subarray dalam tatasusunan dengan pemegang tempat, dan kemudian menggunakan fungsi panggil balik dalam fungsi json_encode untuk menggantikan ruang letak ini kembali kepada subbarray biasa. Berikut ialah contoh:

$array = array(
    "name" => "John",
    "age" => 30,
    "hobbies" => "[[subarray]]"
);

function replaceSubarrays($data) {
    if(is_array($data)) {
        if(in_array("[[subarray]]", $data)) {
            $data = array_map("replaceSubarrays", $data);
        }
    } elseif ($data == "[[subarray]]") {
        $data = array();
    }
    return $data;
}

$json = json_encode(array_map("replaceSubarrays", $array));

echo $json;
Salin selepas log masuk

Dalam contoh ini, kami menggantikan nilai kekunci "hobi" dengan "[[subarray]]", yang merupakan pemegang tempat khas yang menunjukkan bahawa nilai itu ialah subarray. Kami juga mentakrifkan fungsi panggil balik replaceSubarrays untuk mengendalikan pemegang tempat ini. Ia melelar melalui semua elemen tatasusunan secara rekursif, mencari semua subarray yang mengandungi ruang letak, dan menggantikannya dengan tatasusunan kosong. Kami kemudian menggunakan fungsi json_encode dan fungsi array_map untuk menghantar keseluruhan tatasusunan kepada fungsi panggil balik dan menggantikan subarray.

Apabila kita menjalankan contoh ini, kita mendapat rentetan berikut dalam format JSON:

{
    "name": "John",
    "age": 30,
    "hobbies": "[[subarray]]"
}
Salin selepas log masuk

Seperti yang kita jangkakan, nilai kunci "hobi" tidak ditukar kepada tatasusunan JSON , sebaliknya kekal sebagai rentetan "[[subarray]]".

Pendekatan menggunakan ruang letak ini memerlukan sedikit kerja tambahan, tetapi ia membenarkan fungsi json_encode untuk mengekalkan tatasusunan PHP asal, membolehkan kami memproses data dengan cara yang lebih tinggi.

Atas ialah kandungan terperinci Bagaimana untuk mencapai tatasusunan php json_encode tanpa penukaran. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan