Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Membandingkan Tatasusunan Bersekutu Bersarang untuk Perbezaan dengan Cekap?
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!