Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menapis Baris daripada Tatasusunan 2D Berdasarkan Persilangan dengan Tatasusunan 2D Lain dalam PHP?

Bagaimana untuk Menapis Baris daripada Tatasusunan 2D Berdasarkan Persilangan dengan Tatasusunan 2D Lain dalam PHP?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 06:24:30597semak imbas

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

Menapis Baris Tatasusunan 2D Berdasarkan Persimpangan Baris

Dalam PHP, fungsi array_diff_assoc() direka untuk mencari perbezaan antara dua tatasusunan sambil mengutamakan nilai kunci berpasangan. Walau bagaimanapun, semasa menggunakan fungsi ini untuk menapis baris daripada tatasusunan 2D berdasarkan persilangan dengan tatasusunan 2D yang lain, ia mungkin tidak selalu menghasilkan hasil yang diharapkan.

Memahami Isu

Masalah timbul disebabkan oleh perbandingan ketat yang dilakukan oleh array_diff_assoc(). Ia membandingkan perwakilan rentetan pasangan nilai kunci semasa perbandingan. Ini bermakna walaupun dua pasangan nilai kunci mengandungi nilai yang sama, ia tidak dianggap sama melainkan perwakilan rentetannya adalah sama.

Data Sampel

Pertimbangkan data sampel berikut:

<code class="php">$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];</code>

Output Salah

Apabila kami cuba menggunakan array_diff_assoc() untuk menapis $array1 berdasarkan baris dalam $array2, kami mendapat output yang salah:

<code class="php">$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]</code>

Ini output menunjukkan bahawa baris biasa terdapat dalam hasil, manakala output yang dimaksudkan harus mengandungi baris eksklusif daripada $array1.

Punca Isu

Seperti yang dinyatakan sebelum ini, masalahnya terletak pada perbandingan ketat yang dilakukan oleh array_diff_assoc(). Apabila membandingkan dua tatasusunan berikut:

<code class="php">Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )</code>

fungsi mengembalikan pasangan nilai kunci yang berbeza sebagai hasilnya kerana pasangan nilai kunci tidak sama rentetan.

Pendekatan Betul

Untuk menangani isu ini, kita boleh menggunakan pendekatan yang sedikit berbeza yang menyemak kewujudan nilai kunci tertentu dalam tatasusunan:

<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]</code>

Pendekatan ini menggunakan in_array() untuk menyemak sama ada setiap baris daripada $array1 hadir dalam $array2. Jika baris tidak terdapat dalam $array2, baris itu disertakan dalam hasil yang ditapis.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Baris daripada Tatasusunan 2D Berdasarkan Persilangan dengan Tatasusunan 2D Lain 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