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

Linda Hamilton
Lepaskan: 2024-10-26 06:24:30
asal
596 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!