Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mencari Tatasusunan Bersarang Tidak Sama dalam Tatasusunan Berbilang Dimensi?

Bagaimana untuk Mencari Tatasusunan Bersarang Tidak Sama dalam Tatasusunan Berbilang Dimensi?

Susan Sarandon
Susan Sarandonasal
2024-11-16 14:19:03899semak imbas

How to Find Dissimilar Nested Arrays within Multidimensional Arrays?

Cari Tatasusunan Bersarang Tidak Serupa dalam Tatasusunan Berbilang Dimensi

Pertimbangkan dua tatasusunan berikut yang mengandungi baris maklumat bersekutu:

$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'],
];

Tugas kami adalah untuk mengenal pasti dan mengembalikan baris bersekutu yang terdapat dalam $pageids tetapi tiada dalam $parentpage. Walau bagaimanapun, menggunakan array_diff_assoc() pada peringkat pertama tatasusunan ini tidak memberikan hasil yang diingini.

Untuk mengatasi cabaran ini, kami boleh memanfaatkan gabungan array_map() dan serialize() fungsi. Pendekatan ini menukar setiap sub-tatasusunan kepada perwakilan rentetan, dengan berkesan meratakan struktur berbilang dimensi.

$pageWithNoChildren = array_map('unserialize',
    array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));
  1. array_map('serialize', $pageids): Menukar setiap sub-array dalam $pageids kepada rentetan yang mewakili strukturnya.
  2. array_map('serialize', $parentpage): Proses yang sama untuk $parentpage.
  3. array_diff(): Membandingkan perwakilan rentetan dan mengembalikan tatasusunan perbezaan.
  4. array_map('unserialize', ...): Menukarkan perbezaan rentetan kembali ke sub-tatasusunan untuk memulihkan struktur yang diingini.

Tatasusunan $pageWithNoChildren yang terhasil mengandungi sub-tatasusunan daripada $pageids yang tidak terdapat dalam $parentpage:

array (
  0 => 
  array (
    'id' => 1,
    'linklabel' => 'Home',
    'url' => 'home',
  ),
  3 => 
  array (
    'id' => 6,
    'linklabel' => 'Logo Design',
    'url' => 'logodesign',
  ),
  4 => 
  array (
    'id' => 15,
    'linklabel' => 'Content Writing',
    'url' => 'contentwriting',
  ),
)

Atas ialah kandungan terperinci Bagaimana untuk Mencari Tatasusunan Bersarang Tidak Sama dalam Tatasusunan Berbilang Dimensi?. 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