Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membandingkan Tatasusunan Bersekutu Bersarang untuk Perbezaan dengan Cekap?

Bagaimana untuk Membandingkan Tatasusunan Bersekutu Bersarang untuk Perbezaan dengan Cekap?

Linda Hamilton
Linda Hamiltonasal
2024-11-09 01:04:021083semak imbas

How to Efficiently Compare Nested Associative Arrays for Differences?

Membandingkan Tatasusunan Bersekutu Bersarang untuk Perbezaan

Dalam konteks pengaturcaraan, apabila berurusan dengan tatasusunan bersekutu pelbagai dimensi, selalunya menjadi perlu untuk membandingkan kandungannya dan mengenal pasti perbezaan. Pertimbangkan senario di mana anda mempunyai dua tatasusunan:

$pageids = [
    ['id' => 1, 'linklabel' => 'Home', 'url' => 'home'],
    ['id' => 2, 'linklabel' => 'Graphic Design', 'url' => 'graphicdesign'],
    ['id' => 3, 'linklabel' => 'Other Design', 'url' => 'otherdesign'],
    ['id' => 6, 'linklabel' => 'Logo Design', 'url' => 'logodesign'],
    ['id' => 15, 'linklabel' => 'Content Writing', 'url' => 'contentwriting'],
];

$parentpage = [
    ['id' => 2, 'linklabel' => 'Graphic Design', 'url' => 'graphicdesign'],
    ['id' => 3, 'linklabel' => 'Other Design', 'url' => 'otherdesign'],
];

Matlamatnya ialah untuk mencari baris dalam $pageids yang tidak terdapat dalam $parentpage. Menggunakan array_diff_assoc() sahaja mungkin tidak menghasilkan hasil yang diingini jika tatasusunan mengandungi tatasusunan bersekutu bersarang. Untuk menangani isu ini, kita boleh memanfaatkan array_map() dan unserialize().

$pageWithNoChildren = array_map('unserialize',
    array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));

Pertama, array_map() melelarkan sub-array dalam kedua-dua $pageids dan $parentpage dan mensiri setiap sub-array ke dalam perwakilan rentetan menggunakan serialize(). Ini dengan berkesan menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi dengan rentetan sebagai elemen.

Seterusnya, array_diff() membandingkan perwakilan rentetan sub-tatasusunan dan mengembalikan tatasusunan yang mengandungi perbezaan sahaja. Tatasusunan yang terhasil kemudiannya dihantar kembali ke array_map(), yang berulang pada setiap rentetan dan menyahsirinya kembali ke dalam perwakilan sub-array asalnya menggunakan unserialize().

Akibatnya, $pageWithNoChildren akan mengandungi tatasusunan sub-tatasusunan yang mewakili baris dalam $pageids yang tidak terdapat dalam $parentpage. Pendekatan ini secara berkesan membandingkan kandungan tatasusunan bersekutu bersarang dan memberikan perbezaan yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Tatasusunan Bersekutu Bersarang untuk Perbezaan dengan Cekap?. 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