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.
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.
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);
Hasil keluaran:
{ "John": { "age": 32, "gender": "male" }, "Jane": { "age": 28, "gender": "female" } }
(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; }
$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);
[ { "name": "John", "age": 32, "gender": "male", "hobbies_0": "music", "hobbies_1": "books" }, { "name": "Jane", "age": 28, "gender": "female", "hobbies_0": "movies", "hobbies_1": "travel" } ]
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!