Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memadamkan nilai pendua daripada tatasusunan dua dimensi dalam PHP

Bagaimana untuk memadamkan nilai pendua daripada tatasusunan dua dimensi dalam PHP

PHPz
PHPzasal
2023-04-19 09:20:40643semak imbas

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.

Apakah 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.

Kaedah untuk memadam nilai pendua

Seterusnya, kami memperkenalkan beberapa kaedah untuk memadam nilai pendua ​​dari tatasusunan dua dimensi:

Kaedah 1: Gunakan gelung foreach

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.

Kaedah 2: Gunakan fungsi array_map dan array_unique

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.

Kaedah 3: Gunakan fungsi array_filter

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.

Ringkasan

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!

Kenyataan:
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