Tatasusunan dua dimensi PHP tidak boleh menjadi json

WBOY
Lepaskan: 2023-05-06 09:32:07
asal
651 orang telah melayarinya

Dalam pembangunan PHP, selalunya diperlukan untuk menukar data ke dalam format JSON untuk penghantaran atau penyimpanan. Walau bagaimanapun, kadangkala apabila tatasusunan dua dimensi ditukar kepada JSON melalui fungsi json_encode, masalah yang tidak dijangka berlaku Contohnya, hanya data satu dimensi ditukar kepada JSON, atau format JSON tidak teratur. Dalam artikel ini, kita akan menyelidiki sebab mengapa tatasusunan dua dimensi PHP tidak boleh ditukar kepada JSON dan cara menyelesaikannya.

  1. Mengapa tatasusunan PHP 2D tidak boleh ditukar kepada JSON?

Dalam PHP, fungsi json_encode hanya boleh menerima tatasusunan atau objek satu dimensi sebagai input, jika tidak, beberapa masalah mungkin berlaku semasa penukaran. Ini kerana format JSON hanya boleh mewakili struktur data ringkas, seperti tatasusunan dan objek, tetapi tidak boleh mewakili jenis data yang lebih kompleks, seperti sumber, penutupan, rekursi tak terhingga, dsb.

Apabila fungsi json_encode menerima tatasusunan dua dimensi dan ke atas sebagai input, memandangkan format JSON memerlukan semua data mestilah tatasusunan atau objek, dan tatasusunan atau objek ini mungkin mengandungi tatasusunan atau objek lain, ini menghasilkan Mengeluarkan beberapa kerumitan struktur data. Ini menyebabkan fungsi json_encode menukar struktur data dengan terlalu banyak tahap bersarang kepada rentetan apabila memproses data ini dan format JSON yang tidak teratur akan muncul.

  1. Bagaimana untuk menyelesaikan masalah bahawa tatasusunan dua dimensi tidak boleh ditukar kepada JSON?

Walaupun fungsi json_encode tidak boleh menyokong penukaran tatasusunan dua dimensi secara langsung, kami boleh mencapai matlamat ini melalui beberapa teknik dan kaedah. Berikut ialah beberapa penyelesaian:

(1) Gunakan objek dalam tatasusunan

untuk menukar setiap sub-tatasusunan dalam tatasusunan berbilang dimensi kepada objek. Kelebihan ini ialah json_encode boleh mengenal pasti objek dengan betul dan dengan itu menukar data dengan betul ke dalam format JSON.

Berikut ialah contoh menukar tatasusunan dua dimensi kepada objek:

$multiArray = array(
    "John"  => array("age"=>32, "gender"=>"male"), 
    "Jane"  => array("age"=>28, "gender"=>"female")
);
 
$multiObject = new \stdClass();
foreach ($multiArray as $key => $val) {
    $multiObject->$key = (object)$val;
}
 
echo json_encode($multiObject);
Salin selepas log masuk

Hasil keluaran:

{
    "John": {
        "age": 32,
        "gender": "male"
    },
    "Jane": {
        "age": 28,
        "gender": "female"
    }
}
Salin selepas log masuk

(2) Menggunakan fungsi rekursif dalam

function flattenArray($arrayName) {
    $out = array();
    foreach ($arrayName as $key => $subArray) {
        if (is_array($subArray)) {
            $out = array_merge($out, flattenArray($subArray, $key.'_'));
        } else {
            $out[$key] = $subArray;
        }
     }
     return $out;
}
Salin selepas log masuk
Kami kemudiannya boleh mengekodkan hasil ke dalam format JSON menggunakan kod berikut:

$data = array(
    array(
        "name" => "John",
        "age" => 32,
        "gender" => "male",
        "hobbies" => array("music", "books"),
    ),
    array(
        "name" => "Jane",
        "age" => 28,
        "gender" => "female",
        "hobbies" => array("movies", "travel"),
    ),
);
 
$flatData = array_map('flattenArray', $data);
 
echo json_encode($flatData);
Salin selepas log masuk
Output hasil:

[
    {
        "name": "John",
        "age": 32,
        "gender": "male",
        "hobbies_0": "music",
        "hobbies_1": "books"
    },
    {
        "name": "Jane",
        "age": 28,
        "gender": "female",
        "hobbies_0": "movies",
        "hobbies_1": "travel"
    }
]
Salin selepas log masuk
    Ringkasan
Dalam PHP, fungsi json_encode hanya boleh menerima tatasusunan atau objek satu dimensi sebagai input dan tatasusunan berbilang dimensi tidak boleh ditukar terus kepada format JSON. Walau bagaimanapun, kita boleh menggunakan beberapa teknik dan kaedah, seperti menukar sub-tatasusunan dalam tatasusunan kepada objek, menggunakan fungsi rekursif dalam, dsb., untuk menukar tatasusunan berbilang dimensi kepada format JSON. Dalam projek sebenar, kita boleh memilih kaedah yang sesuai untuk menyelesaikan masalah mengikut keperluan.

Atas ialah kandungan terperinci Tatasusunan dua dimensi PHP tidak boleh menjadi 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan