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.
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.
Pertimbangkan data sampel berikut:
<code class="php">$array1 = [ [12 => 'new q sets'], [11 => 'common set'] ]; $array2 = [ [11 => 'common set'] ];</code>
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.
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.
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!