Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menukar tatasusunan multidimensi kepada tatasusunan satu dimensi dalam PHP
Dalam pengaturcaraan PHP, kami sering menggunakan tatasusunan dan tatasusunan berbilang dimensi juga merupakan jenis data yang sangat biasa. Terutamanya apabila berurusan dengan data berstruktur yang kompleks, menggunakan tatasusunan berbilang dimensi boleh menyusun data dengan lebih jelas. Walau bagaimanapun, dalam beberapa kes, kita perlu menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi, yang sangat mudah. Artikel ini akan memperkenalkan cara menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dalam PHP.
1. Apakah tatasusunan berbilang dimensi?
Dalam PHP, tatasusunan boleh mempunyai berbilang dimensi. Tatasusunan satu dimensi adalah bersamaan dengan senarai, di mana setiap elemen mempunyai subskrip, dan nilai yang sepadan boleh diperolehi melalui subskrip. Tatasusunan berbilang dimensi menggunakan tatasusunan untuk menyatakan struktur yang serupa dengan jadual atau matriks, di mana setiap elemen boleh menjadi tatasusunan atau tatasusunan berbilang dimensi yang lain.
Sebagai contoh, tatasusunan dua dimensi berikut mewakili jadual maklumat pelajar:
$students = array( array("name" => "张三", "age" => 18, "score" => array(90, 85, 94)), array("name" => "李四", "age" => 22, "score" => array(80, 88, 90)), array("name" => "王五", "age" => 20, "score" => array(92, 95, 90)) );
Terdapat tiga elemen dalam tatasusunan ini, setiap elemen ialah pasangan nilai kunci yang mengandungi tiga A satu tatasusunan -dimensi dengan kekunci "nama", "umur", dan "skor". Nilai yang sepadan dengan "skor" ialah tatasusunan satu dimensi yang mengandungi tiga elemen, yang mewakili markah tiga peperiksaan.
2. Mengapakah kita perlu menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi?
Walaupun tatasusunan berbilang dimensi adalah mudah apabila menyatakan data yang kompleks, dalam sesetengah keadaan ia perlu ditukar kepada tatasusunan satu dimensi, supaya data boleh dimanipulasi dan diproses dengan lebih mudah.
Sebagai contoh, jika anda perlu mengeluarkan jadual maklumat pelajar di atas ke dalam jadual ringkas, maka anda perlu mengembangkan maklumat setiap pelajar menjadi satu baris:
| 姓名 | 年龄 | 成绩1 | 成绩2 | 成绩3 | | 张三 | 18 | 90 | 85 | 94 | | 李四 | 22 | 80 | 88 | 90 | | 王五 | 20 | 92 | 95 | 90 |
Dalam kes ini, anda perlu Tatasusunan berbilang dimensi dikembangkan menjadi tatasusunan satu dimensi, dengan setiap baris sepadan dengan tatasusunan satu dimensi.
3. Bagaimana untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi?
Dalam PHP, tidak sukar untuk menukar tatasusunan berbilang dimensi kepada tatasusunan satu bit Ia boleh dicapai melalui fungsi rekursif.
Berikut ialah kod sampel yang meratakan tatasusunan dimensi arbitrari menjadi tatasusunan satu dimensi:
function flatten($arr){ $result = array(); foreach($arr as $value){ if(is_array($value)){ $result = array_merge($result, flatten($value)); }else{ $result[] = $value; } } return $result; }
Apa yang fungsi ini lakukan adalah mudah: secara rekursif jika elemen ialah tatasusunan Memanggil dirinya sendiri , jika tidak menambah elemen pada tatasusunan yang terhasil. Anda boleh menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dengan memanggil fungsi ini, contohnya:
$students = array( array("name" => "张三", "age" => 18, "score" => array(90, 85, 94)), array("name" => "李四", "age" => 22, "score" => array(80, 88, 90)), array("name" => "王五", "age" => 20, "score" => array(92, 95, 90)) ); $result = flatten($students); print_r($result);
Hasil output ialah:
Array ( [0] => 张三 [1] => 18 [2] => 90 [3] => 85 [4] => 94 [5] => 李四 [6] => 22 [7] => 80 [8] => 88 [9] => 90 [10] => 王五 [11] => 20 [12] => 92 [13] => 95 [14] => 90 )
Seperti yang anda lihat, tatasusunan dua dimensi asal telah diratakan menjadi tatasusunan satu dimensi yang mengandungi 15 elemen.
4. Masalah yang dihadapi dan penyelesaian
Apabila menukar tatasusunan berbilang dimensi, anda mungkin menghadapi beberapa masalah. Di bawah adalah beberapa masalah yang mungkin dan penyelesaian yang sepadan.
Dalam contoh sebelumnya, kami hanya mengembangkan nilai dalam tatasusunan menjadi tatasusunan satu dimensi, tanpa menghiraukan kekunci tatasusunan. Jika anda perlu mengekalkan kunci, anda boleh menggunakan kod berikut:
function flatten2($arr){ $result = array(); foreach($arr as $key => $value){ if(is_array($value)){ $result = array_merge($result, flatten2($value)); }else{ $result[$key] = $value; } } return $result; }
Satu-satunya perbezaan antara fungsi ini dan fungsi sebelumnya ialah apabila elemen itu bukan tatasusunan, kedua-dua nilai dan kunci ditambah pada tatasusunan yang terhasil.
Apabila setiap elemen dalam tatasusunan berbilang dimensi ialah tatasusunan bersekutu, ia boleh dikembangkan menjadi tatasusunan satu dimensi, di mana setiap elemen ialah tatasusunan bersekutu. Contohnya, untuk mengembangkan tatasusunan ini:
$students = array( array( "name" => "张三", "age" => 18, "score" => array("语文" => 90, "数学" => 85, "英语" => 94) ), array( "name" => "李四", "age" => 22, "score" => array("语文" => 80, "数学" => 88, "英语" => 90) ), array( "name" => "王五", "age" => 20, "score" => array("语文" => 92, "数学" => 95, "英语" => 90) ) );
ke dalam tatasusunan satu dimensi yang mengandungi 15 elemen, anda boleh menggunakan kod berikut:
function flatten3($arr){ $result = array(); foreach($arr as $key => $value){ if(is_array($value)){ if(!empty($value)){ foreach($value as $sub_key => $sub_value){ $result[$key . "_" . $sub_key] = $sub_value; } }else{ $result[$key] = ""; } }else{ $result[$key] = $value; } } return $result; }
Logik fungsi ini adalah serupa kepada fungsi sebelumnya , satu-satunya perbezaan ialah apabila elemen ialah tatasusunan bersekutu, kunci dan nilai digabungkan dan disimpan dalam tatasusunan hasil sebagai kunci baharu.
Dalam contoh di atas, jika tatasusunan asal mengandungi tatasusunan null atau kosong, ia akan diabaikan selepas diratakan kerana ia bukan elemen dalam tatasusunan yang perlu diproses. Jika anda ingin mengekalkan unsur-unsur ini, anda boleh terus menambah penghakiman pada pernyataan if:
function flatten4($arr){ $result = array(); foreach($arr as $key => $value){ if(is_array($value)){ if(!empty($value)){ foreach($value as $sub_key => $sub_value){ $result[$key . "_" . $sub_key] = $sub_value; } }else{ $result[$key] = array(); } }else{ $result[$key] = $value; if(is_null($value)){ $result[$key] = null; } } } return $result; }
Satu-satunya perbezaan antara fungsi ini dan fungsi sebelumnya ialah apabila elemen itu adalah nol atau tatasusunan kosong, nilai kunci yang sepadan ditambah pada tatasusunan hasil.
5 Ringkasan
Menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi adalah sangat biasa dalam pengaturcaraan PHP. Dengan fungsi rekursif, kita boleh dengan mudah meratakan tatasusunan dimensi arbitrari menjadi tatasusunan satu dimensi. Dalam amalan, disebabkan oleh struktur tatasusunan berbilang dimensi yang berbeza, beberapa kes tepi mungkin ditemui yang memerlukan pengendalian khas. Tetapi secara umum, proses ini tidak sukar, anda hanya perlu biasa dengan penggunaan fungsi rekursif.
Atas ialah kandungan terperinci Bagaimana untuk menukar tatasusunan multidimensi kepada tatasusunan satu dimensi dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!