Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk memadam persimpangan tatasusunan dalam php

Bagaimana untuk memadam persimpangan tatasusunan dalam php

PHPz
PHPzasal
2023-04-18 14:07:04683semak imbas

Memadamkan persimpangan tatasusunan ialah tugas biasa dalam PHP. Intersection ialah nilai yang biasa dalam dua atau lebih tatasusunan. Dalam sesetengah kes, kita mungkin perlu mengalih keluar persimpangan daripada satu atau lebih tatasusunan untuk melaksanakan operasi atau perbandingan tertentu padanya. Artikel ini akan memperkenalkan beberapa kaedah, bersama dengan kebaikan dan keburukan mereka, untuk membantu anda menyelesaikan tugas ini.

Kaedah 1: Gunakan fungsi array_diff

PHP mempunyai fungsi terbina dalam dipanggil array_diff, yang boleh mengembalikan elemen dalam satu tatasusunan yang wujud dalam tatasusunan lain atau berbilang. Kita boleh menggunakan fungsi ini untuk mengalih keluar persilangan antara dua atau lebih tatasusunan.

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(3, 4, 5, 6, 7);

$result = array_diff($arr1, $arr2);

print_r($result); // [1, 2]

Dalam contoh di atas, kami menggunakan fungsi array_diff untuk mendapatkan elemen dalam $arr1 yang tidak wujud dalam $arr2. Ini bermakna persimpangan telah dialih keluar.

Kelebihan:

  • Mudah digunakan, hanya satu baris kod diperlukan untuk menyelesaikan tugasan.
  • Ini adalah kaedah terpantas jika anda hanya perlu mengalih keluar persilangan antara dua tatasusunan.

Kelemahan:

  • Kaedah ini mungkin tidak sesuai jika anda perlu mengalih keluar persimpangan daripada tiga atau lebih tatasusunan. Anda perlu memanggil array_diff beberapa kali, dan bilangan tatasusunan yang terlibat akan mempengaruhi prestasi.
  • Jika anda perlu mengekalkan tatasusunan asal, anda memerlukan kerja tambahan, seperti menetapkan semula tatasusunan pertama dengan tatasusunan kedua.

Kaedah 2: Gunakan gelung foreach

Kaedah lain ialah menggunakan gelung foreach. Idea kaedah ini adalah untuk mengulangi tatasusunan pertama dan memeriksa sama ada setiap elemennya terdapat dalam tatasusunan lain. Jika ada, elemen itu dialih keluar daripada tatasusunan pertama.

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(3, 4, 5, 6, 7);

foreach ($arr1 as $key => $value) {
    if (in_array($value, $arr2)) {
        unset($arr1[$key]);
    }
}

print_r($arr1); // [1, 2]

Dalam contoh di atas, kami menggunakan gelung foreach untuk melintasi $arr1 dan menggunakan fungsi in_array untuk menyemak sama ada elemen semasa wujud dalam $arr2. Jika ada, elemen dialih keluar daripada $arr1 menggunakan fungsi unset.

Kelebihan:

  • Boleh mengalih keluar persimpangan daripada berbilang tatasusunan.
  • Tiada kerja tambahan diperlukan jika anda perlu mengekalkan tatasusunan asal.

Kelemahan:

  • Mempunyai prestasi yang lemah, terutamanya untuk tatasusunan besar, kerana ia memerlukan berbilang gelung dan panggilan fungsi in_array.
  • Lebih banyak kerja diperlukan jika anda perlu mengekalkan kunci elemen dalam tatasusunan asal.

Kaedah 3: Gunakan fungsi array_filter

Kaedah lain ialah menggunakan fungsi array_filter. Fungsi ini menapis elemen dalam tatasusunan berdasarkan set peraturan. Kita boleh menentukan fungsi panggil balik yang menyemak sama ada setiap elemen dalam tatasusunan wujud dalam tatasusunan lain. Jika ada, elemen itu dikeluarkan.

$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(3, 4, 5, 6, 7);

$callback = function($value) use ($arr2) {
    return !in_array($value, $arr2);
};

$result = array_filter($arr1, $callback);

print_r($result); // [1, 2]

Dalam contoh di atas, kami menggunakan fungsi array_filter dan fungsi panggil balik untuk mendapatkan elemen dalam $arr1 yang tidak terdapat dalam $arr2. Fungsi panggil balik menggunakan pernyataan penggunaan untuk menghantar $arr2 kepadanya.

Kelebihan:

  • Persimpangan boleh dialih keluar daripada berbilang tatasusunan kerana fungsi panggil balik boleh digunakan beberapa kali.
  • Tiada kerja tambahan jika anda perlu mengekalkan tatasusunan asal.

Kelemahan:

  • mempunyai prestasi yang lemah kerana ia memerlukan berbilang panggilan fungsi panggil balik dan panggilan fungsi in_array.

Ringkasnya, jika anda hanya perlu mengalih keluar persilangan antara dua tatasusunan, menggunakan fungsi array_diff adalah yang paling pantas. Jika anda perlu mengalih keluar persimpangan daripada berbilang tatasusunan, menggunakan gelung foreach atau fungsi array_filter ialah pilihan yang lebih baik. Bergantung pada keperluan anda, pilih kaedah yang paling sesuai untuk menyelesaikan tugas.

Atas ialah kandungan terperinci Bagaimana untuk memadam persimpangan tatasusunan 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