Dalam PHP, kita selalunya perlu berurusan dengan tatasusunan, dan salah satu soalan biasa ialah cara mengalih keluar nilai pendua dalam tatasusunan dua dimensi. Masalah ini tidak sukar untuk diselesaikan. Kita boleh menggunakan beberapa fungsi tatasusunan yang disediakan oleh PHP, seperti array_map
, array_unique
, array_filter
dan sebagainya. Seterusnya, mari kita lihat bagaimana untuk memadamkan nilai pendua daripada tatasusunan dua dimensi.
Tatasusunan dua dimensi bermakna unsur-unsur dalam tatasusunan juga merupakan tatasusunan, dan ia boleh dinyatakan sebagai matriks. Dalam PHP, kita boleh mencipta tatasusunan dua dimensi menggunakan kaedah berikut:
$students = array( array('name' => '张三', 'age' => 18), array('name' => '李四', 'age' => 20), array('name' => '王五', 'age' => 22), array('name' => '赵六', 'age' => 18) );
Dalam kod di atas, kami mencipta tatasusunan $students
, di mana setiap elemen juga merupakan tatasusunan, mengandungi name
dan age
dua pasangan nilai kunci. Tatasusunan ini boleh difahami sebagai jadual maklumat pelajar.
Seterusnya, kami memperkenalkan beberapa kaedah untuk memadam nilai pendua dari tatasusunan dua dimensi:
function remove_duplicate_by_foreach($arr){ $result = array();//定义一个新数组,用来存放去重后的数据 foreach($arr as $key => $value){ $flag = false; foreach($result as $val){ if($value == $val){ $flag = true; break; } } if(!$flag){ //如果数据不重复,则将其添加到新数组中 array_push($result, $value); } } return $result; } $students = array( array('name' => '张三', 'age' => 18), array('name' => '李四', 'age' => 20), array('name' => '王五', 'age' => 22), array('name' => '赵六', 'age' => 18), array('name' => '张三', 'age' => 18) ); print_r(remove_duplicate_by_foreach($students));
Dalam kod di atas, kami mula-mula mentakrifkan tatasusunan $result
kosong, dan kemudian gunakan dua gelung foreach untuk melintasi tatasusunan asal $arr
, untuk setiap elemen $value
dalam tatasusunan $result
Cari jika unsur yang sama wujud, jika tidak, tambahkannya pada tatasusunan $result
.
Kaedah ini agak mudah dan mudah difahami, tetapi ia agak tidak cekap, terutamanya apabila terdapat banyak data, masa traversal akan menjadi sangat lama.
function remove_duplicate_by_array_map($arr){ $temp = array_map("serialize", $arr);//将数组中的每个元素都序列化 $result = array_unique($temp);//去重操作 $new_array = array(); foreach ($result as $value) {//反序列化操作 array_push($new_array, unserialize($value)); } return $new_array; } $students = array( array('name' => '张三', 'age' => 18), array('name' => '李四', 'age' => 20), array('name' => '王五', 'age' => 22), array('name' => '赵六', 'age' => 18), array('name' => '张三', 'age' => 18) ); print_r(remove_duplicate_by_array_map($students));
Dalam kod di atas, kami mula-mula menggunakan fungsi array_map
untuk mensiri setiap elemen dalam tatasusunan asal $arr
ke dalam String aksara , kemudian gunakan fungsi array_unique
untuk menyahduplikasi rentetan bersiri, dan akhirnya gunakan gelung foreach untuk menyahsirikannya menjadi elemen tatasusunan biasa.
Kaedah ini lebih cekap sedikit daripada kaedah 1, tetapi proses bersiri dan penyahserikatan mungkin menjejaskan prestasi.
function remove_duplicate_by_array_filter($arr){ $unique_arr = array_unique(array_map('serialize',$arr));//先将数组序列化再去重 return array_filter($unique_arr, function($var){//回调函数进行反序列化 return unserialize($var); }); } $students = array( array('name' => '张三', 'age' => 18), array('name' => '李四', 'age' => 20), array('name' => '王五', 'age' => 22), array('name' => '赵六', 'age' => 18), array('name' => '张三', 'age' => 18) ); print_r(remove_duplicate_by_array_filter($students));
Dalam kod di atas, kita mula-mula menggunakan fungsi array_map
untuk mensiri setiap elemen dalam tatasusunan asal $arr
menjadi rentetan. Kemudian gunakan fungsi array_unique
untuk menyahduplikasi rentetan bersiri, dan akhirnya gunakan fungsi array_filter
untuk melaksanakan operasi penyahserikan.
Berbanding dengan dua kaedah pertama, kaedah ini mempunyai kurang kod dan lebih cekap.
Dalam PHP, tidak sukar untuk memadamkan nilai pendua dalam tatasusunan dua dimensi Anda boleh menggunakan fungsi seperti array_map
, array_unique
dan array_filter
untuk mencapai ini. Pilih kaedah yang berbeza mengikut keperluan untuk mencapai hasil pemprosesan yang lebih cekap.
Atas ialah kandungan terperinci Bagaimana untuk memadamkan nilai pendua daripada tatasusunan dua dimensi dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!