Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memadam persilangan dua tatasusunan dalam php

Bagaimana untuk memadam persilangan dua tatasusunan dalam php

PHPz
PHPzasal
2023-04-19 11:35:55607semak imbas

Dalam pengaturcaraan PHP, adalah perkara biasa untuk menghadapi masalah memadamkan persilangan dua tatasusunan, terutamanya apabila persilangan berbilang tatasusunan perlu diproses. Artikel ini akan memperkenalkan anda kepada kaedah mudah dan praktikal untuk memadamkan persilangan antara dua tatasusunan.

1. Huraian Masalah

Andaikan terdapat dua tatasusunan $A dan $B, masing-masing seperti berikut:

$A = tatasusunan(1,2,3,4, 5 ,6);

$B = array(4,5,7,8,9,10);

Keperluan adalah untuk mengekalkan hanya semua elemen $A dan $B, tetapi bukan dua Bahagian persilangan dalam tatasusunan, iaitu tatasusunan hasil hendaklah:

$Result = array(1,2,3,6,7,8,9,10);

Jadi apa yang perlu saya lakukan? Berikut akan memperkenalkan anda satu persatu.

2. Kaedah 1

Pertama, kita boleh melaksanakan operasi perbezaan elemen tatasusunan melalui fungsi array_diff dalam PHP Kodnya adalah seperti berikut:

$Result = array_merge (array_diff ($A, $B), array_diff($B, $A));

Dalam kod di atas, array_diff($A, $B) bermaksud menapis item dalam tatasusunan $A tetapi tidak dalam $B Elemen dalam tatasusunan; array_diff($B, $A) bermaksud menapis elemen yang berada dalam tatasusunan $B tetapi tidak dalam tatasusunan $A. Kemudian gunakan fungsi array_merge untuk menggabungkan dua tatasusunan hasil. Kaedah ini kelihatan mudah, tetapi sebenarnya ia tidak teguh, seperti yang ditunjukkan dalam perkara berikut:

  1. Ia tidak dapat mengendalikan situasi di mana terdapat berbilang elemen yang sama dalam tatasusunan. Kerana apabila menggabungkan dua tatasusunan, elemen yang sama sebenarnya telah digabungkan, jadi pendua tidak boleh dialih keluar.
  2. Tidak boleh mengendalikan jenis elemen yang tidak konsisten. Sebagai contoh, terdapat elemen jenis rentetan 'hello' dalam $A, tetapi bukan dalam $B, tetapi kami berharap tatasusunan Hasil keluaran akhir ialah penyatuan semua elemen, maka ralat akan dilaporkan apabila menggunakan fungsi array_merge.

Jadi, untuk mengelakkan masalah ini dengan lebih baik, kita perlu menggunakan kaedah yang lebih mantap untuk memadamkan persilangan elemen tatasusunan.

3 Kaedah 2

Seterusnya, kita boleh menggelungkan setiap elemen dalam tatasusunan, dan melaksanakan operasi penyahduplikasian dan penapisan dalam proses. Kodnya adalah seperti berikut:

$Result = array();

foreach($A sebagai $value){

if(!in_array($value, $B)){
    $Result[] = $value;
}

}

foreach($ B sebagai $value){

if(!in_array($value, $Result)){
    $Result[] = $value;
}

}

Dalam kod di atas, kami mula-mula mentakrifkan tatasusunan kosong $Result, mewakili tatasusunan hasil akhir. Kemudian gunakan dua gelung foreach untuk lelaran melalui setiap elemen dalam $A dan $B. Semasa proses, gunakan fungsi in_array untuk menentukan sama ada elemen semasa muncul dalam tatasusunan lain, seperti sama ada ia muncul dalam $B. Jika ia tidak muncul sebelum ini, ia ditambahkan pada $Result. Tatasusunan $Result terakhir ialah penyatuan semua elemen dalam dua tatasusunan.

Menggunakan kaedah ini mempunyai kelebihan berikut:

  1. boleh mengendalikan situasi di mana terdapat berbilang elemen yang sama dalam tatasusunan, kerana elemen ditambahkan pada tatasusunan baharu satu demi satu.
  2. boleh mengendalikan jenis elemen yang tidak konsisten kerana nilai elemen dibandingkan satu demi satu melalui fungsi in_array.
  3. Apabila saiz tatasusunan kecil, kecekapannya lebih tinggi.

4. Ringkasan

Dalam PHP, artikel ini memperkenalkan dua cara untuk menangani isu persilangan tatasusunan: menggunakan fungsi array_diff dan penapisan lintasan gelung. Walaupun kedua-dua kaedah boleh mendapatkan hasil yang betul, kaedah menggunakan traversal gelung adalah lebih teguh dan boleh mengendalikan lebih banyak kes tepi, yang patut dipelajari.

Atas ialah kandungan terperinci Bagaimana untuk memadam persilangan dua 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