Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara cekap mencari set perbezaan tatasusunan dua dimensi dalam PHP

Cara cekap mencari set perbezaan tatasusunan dua dimensi dalam PHP

PHPz
PHPzasal
2023-04-26 09:10:511084semak imbas

Semasa proses pembangunan PHP, kita selalunya perlu melakukan beberapa operasi pada tatasusunan, seperti penggabungan tatasusunan, penyahduplikasian, persilangan, kesatuan, dsb. Perbezaan tatasusunan ialah jenis operasi tatasusunan yang sangat penting.Ia boleh membantu kami mencari bahagian berlainan dua tatasusunan dengan cekap. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa PHP untuk mencari perbezaan set tatasusunan dua dimensi dengan cekap.

  1. Apakah tatasusunan dua dimensi

Sebelum kita mula belajar cara mencari set perbezaan tatasusunan dua dimensi, kita perlu memahami dahulu apa itu dua? tatasusunan -dimensi ialah. Tatasusunan dua dimensi bermakna setiap elemen dalam tatasusunan ialah tatasusunan, iaitu tatasusunan mengandungi berbilang tatasusunan. Tatasusunan dua dimensi adalah sangat biasa dalam aplikasi praktikal, seperti pemprosesan jadual data, data statistik, dsb., jadi kita perlu menguasai cara mengendalikan tatasusunan dua dimensi.

  1. Kira perbezaan antara dua tatasusunan

Dalam PHP, kita boleh menggunakan fungsi array_diff untuk mengira perbezaan antara dua tatasusunan satu dimensi, tetapi untuk tatasusunan dua dimensi Dalam erti kata lain, kita perlu menggunakan beberapa kaedah lain untuk menyelesaikannya. Seterusnya kami akan memperkenalkan cara mengira set perbezaan dua tatasusunan dua dimensi.

Andaikan kita mempunyai dua tatasusunan dua dimensi $firstArray dan $secondArray. Kita perlu mengira perbezaannya dan menyimpan perbezaan itu ke dalam $resultArray. Kita boleh menggunakan kod berikut:

$resultArray = array();
foreach($firstArray as $firstItem){
    $flag = true;
    foreach($secondArray as $secondItem){
        if($firstItem == $secondItem){
            $flag = false;
            break;
        }
    }
    if($flag){
        $resultArray[] = $firstItem;
    }
}

Dalam kod di atas, kami menggunakan dua gelung foreach untuk melintasi dua tatasusunan dua dimensi dan menyimpan elemen mereka masing-masing dalam $firstItem dan $secondItem. Kemudian kami menggunakan pembolehubah $flag untuk menandakan sama ada syarat dipenuhi. Jika $firstItem sudah wujud dalam $secondArray, tetapkan $flag kepada false. Akhir sekali, jika $flag masih sama dengan benar, ini bermakna $firstItem tidak wujud dalam $secondArray dan kita perlu menyimpannya dalam $resultArray.

Walaupun kaedah di atas boleh dilaksanakan, ia kurang cekap apabila kita berurusan dengan tatasusunan dua dimensi berskala besar. Untuk meningkatkan prestasi, kita boleh menggunakan beberapa fungsi PHP untuk memudahkan kod di atas.

  1. Menggunakan fungsi array_udiff

PHP menyediakan fungsi array_udiff, yang boleh digunakan untuk mengira perbezaan antara dua tatasusunan (atau berbilang tatasusunan). Fungsi fungsi ini adalah sama seperti gelung foreach di atas, tetapi ia lebih cekap daripada gelung foreach. Kita boleh menggunakan kod berikut untuk mengira perbezaan antara dua tatasusunan dua dimensi:

function compareArray($a, $b) {
    return $a == $b ? 0 : 1;
}
$resultArray = array_udiff($firstArray, $secondArray, 'compareArray');

Dalam kod di atas, kami telah menyesuaikan fungsi compareArray untuk menentukan sama ada dua elemen adalah sama. Mengembalikan 0 jika sama, 1 sebaliknya. Apabila memanggil fungsi array_udiff, kami menghantar dua tatasusunan dua dimensi $firstArray dan $secondArray, dan fungsi tersuai compareArray sebagai parameter. Fungsi array_udiff membandingkan elemen dalam dua tatasusunan mengikut fungsi compareArray, mengalih keluar elemen yang sama, dan akhirnya mengembalikan perbezaan antara dua tatasusunan.

  1. Gunakan fungsi array_map dan array_column

Selain menggunakan fungsi array_udiff, kita juga boleh menggunakan fungsi array_map dan array_column untuk memproses set perbezaan dua dimensi tatasusunan. Fungsi array_map boleh menggunakan fungsi tertentu pada setiap elemen dalam tatasusunan dan mengembalikan tatasusunan baharu. Fungsi array_column boleh mengekstrak lajur daripada tatasusunan dua dimensi dan mengembalikan tatasusunan satu dimensi yang baharu.

Di bawah kami menggabungkan dua fungsi di atas dan menggunakan kod berikut untuk mengira set perbezaan dua tatasusunan dua dimensi:

$diffArray = array_map(function($item) use($secondArray) {
    $existKey = array_search($item['id'], array_column($secondArray, 'id'));
    return $existKey === false ? $item : null;
}, $firstArray);
$resultArray = array_filter($diffArray);

Dalam kod di atas, kami menggunakan fungsi array_map untuk tukar $ Setiap elemen dalam firstArray digunakan pada fungsi tanpa nama. Dalam fungsi tanpa nama, kami menggunakan fungsi array_search untuk mencari sama ada elemen yang sama wujud dalam $secondArray. Mengembalikan null jika ada, sebaliknya mengembalikan elemen. Akhir sekali, kami menggunakan fungsi array_filter untuk memadam nilai nol, dan akhirnya mendapatkan set perbezaan dua tatasusunan dua dimensi.

  1. Ringkasan

Perbezaan tatasusunan ialah operasi yang sering digunakan dalam pembangunan PHP, yang boleh membantu kami mencari nilai berbeza dalam dua bahagian tatasusunan dua dimensi. Dalam artikel ini, kami memperkenalkan tiga kaedah untuk mengira perbezaan tatasusunan dua dimensi: menggunakan gelung foreach, fungsi array_udiff, array_map dan fungsi array_column. Berbanding dengan gelung foreach, dua kaedah terakhir adalah lebih cekap dan lebih cekap apabila memproses tatasusunan dua dimensi berskala besar. Dalam proses pembangunan sebenar, kita harus memilih kaedah yang paling sesuai berdasarkan situasi sebenar.

Atas ialah kandungan terperinci Cara cekap mencari set perbezaan 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