Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menapis Baris Bertindih dalam Tatasusunan 2D Menggunakan Fungsi `array_diff_assoc()` PHP?

Bagaimana untuk Menapis Baris Bertindih dalam Tatasusunan 2D Menggunakan Fungsi `array_diff_assoc()` PHP?

Linda Hamilton
Linda Hamiltonasal
2024-10-25 11:17:30113semak imbas

How to Filter Overlapping Rows in 2D Arrays Using PHP's `array_diff_assoc()` Function?

Menapis Baris Tatasusunan 2D Berdasarkan Baris Bertindih

Dalam PHP, fungsi array_diff_assoc() biasanya digunakan untuk menentukan perbezaan antara dua tatasusunan. Walau bagaimanapun, dalam senario tertentu yang melibatkan tatasusunan 2D, pengguna mungkin menemui hasil yang tidak dijangka apabila cuba menapis baris bertindih.

Seorang pengguna melaporkan menggunakan array_diff_assoc() untuk membandingkan dua tatasusunan 2D tetapi mendapati hasilnya mengandungi baris biasa daripada kedua-dua tatasusunan dan bukannya baris unik sahaja. Untuk memahami isu ini, mari kita periksa sampel data yang disediakan oleh pengguna:

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 => [
    [11 => 'common set']
];

Selepas memanggil array_diff_assoc($array1, $array2), pengguna dijangka menerima output yang mengandungi hanya baris unik daripada $array1 (iaitu, '[12 => 'set q baharu']'). Walau bagaimanapun, output sebenar ialah:

[
    [11 => 'common set']
]

Masalahnya terletak pada cara PHP membandingkan nilai dalam array_diff_assoc(). Dua nilai dianggap sama hanya jika ia benar-benar sama dengan rentetan. Dalam kes tatasusunan 2D yang disediakan, nilai yang dikaitkan dengan kekunci '11' dalam kedua-dua tatasusunan ialah rentetan 'set biasa'. Walau bagaimanapun, pasangan nilai kunci itu sendiri tidak sama dengan tatasusunan.

Akibatnya, apabila tatasusunan_diff_assoc() membandingkan dua tatasusunan, ia mendapati pasangan nilai kunci [11 => 'common set'] adalah biasa kepada kedua-dua tatasusunan dan mengecualikannya daripada perbezaan. Tingkah laku ini berpunca daripada fakta bahawa semua tatasusunan dalam PHP diwakili secara dalaman sebagai rentetan "Array".

Untuk menangani isu ini, seseorang boleh menggunakan pendekatan berbeza untuk menapis baris bertindih antara tatasusunan 2D. Satu kaedah biasa melibatkan mencipta pengecam unik untuk setiap baris dan menggunakan pengecam itu sebagai kunci untuk tatasusunan bersekutu. Berikut ialah contoh:

$uniqueIdentifiers = [];
$filteredRows = [];

foreach ($array1 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    $uniqueIdentifiers[$uniqueIdentifier] = true;
}

foreach ($array2 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    if (isset($uniqueIdentifiers[$uniqueIdentifier])) {
        unset($uniqueIdentifiers[$uniqueIdentifier]);
    }
}

foreach ($uniqueIdentifiers as $uniqueIdentifier => $isPresent) {
    $filteredRows[] = array_values(array_flip(explode('|', $uniqueIdentifier)));
}

Pendekatan ini mencipta pengecam unik untuk setiap baris dengan menggabungkan nilai tatasusunan dan menggunakannya sebagai kunci. Ia kemudian melelar melalui tatasusunan kedua dan menyahset sebarang pengecam unik yang sepadan daripada senarai. Akhir sekali, ia berulang melalui pengecam unik yang tinggal, membalikkan kekunci dan nilai untuk membina semula baris dan menambahkannya pada tatasusunan $filteredRows.

Dengan menggunakan kaedah ini, anda boleh menapis baris bertindih antara tatasusunan 2D dengan berkesan. sambil memastikan baris unik dikenal pasti dengan betul dan dikembalikan dalam hasilnya.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Baris Bertindih dalam Tatasusunan 2D Menggunakan Fungsi `array_diff_assoc()` 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