Rumah > pangkalan data > tutorial mysql > Bagaimana dengan Cekap Mengubah Data Rata menjadi Menu Bersarang Hierarki dalam PHP dan MySQL tanpa Rekursi?

Bagaimana dengan Cekap Mengubah Data Rata menjadi Menu Bersarang Hierarki dalam PHP dan MySQL tanpa Rekursi?

Susan Sarandon
Lepaskan: 2024-10-31 19:23:29
asal
927 orang telah melayarinya

How to Efficiently Transform Flat Data into a Hierarchical Nested Menu in PHP and MySQL without Recursion?

Data Rata ke Menu Bersarang Hierarki:

Membina pepohon menu senarai tidak tersusun daripada pangkalan data boleh menjadi tugas biasa dalam pembangunan web. Untuk mencapai ini dalam PHP dan MySQL, tanpa menggunakan rekursi dan pertanyaan pangkalan data, anda boleh menggunakan algoritma laluan tunggal untuk memproses objek halaman anda.

Objek halaman yang disediakan mempunyai atribut parent_id, yang menunjukkan hubungan ibu bapa-anak . Untuk membina pokok menu, anda memerlukan fungsi seperti ini:

<code class="php">function build_menu($page_objects) {

  // Create an array to store parent-child relationships
  $parents = array();

  // Loop through the page objects
  foreach ($page_objects as $page) {
    $parents[$page['id']] = $page['parent_id'];
  }

  // Initialize the menu string
  $menu = '';

  // Loop through the page objects again
  foreach ($page_objects as $page) {

    // Check if the current page has no parent (root page)
    if (!isset($parents[$page['id']])) {
      $menu .= "<ul><li>{$page['title']}";
    }

    // Handle child pages
    else {
      $parent_id = $parents[$page['id']];

      // Find the parent 'ul' tag for the child page
      $parent_index = strrpos($menu, "<li>{$page_objects[$parent_id]['title']}");

      // Append the child page to the parent 'ul' tag
      $menu = substr_replace($menu, "<li>{$page['title']}", $parent_index + strlen($page_objects[$parent_id]['title']) + 4, 0);
    }

    // Close the 'li' tag
    $menu .= '</li>';

    // Handle closing the 'ul' tag for root pages
    if (!isset($parents[$page['parent_id']])) {
      $menu .= "</ul>";
    }
  }

  return $menu;
}</code>
Salin selepas log masuk

Penggunaan:

Sebagai contoh, dengan objek halaman yang disediakan:

<code class="php">$page_objects = array(
    array('id' => 1, 'title' => 'Menu 1', 'parent_id' => null),
    array('id' => 2, 'title' => 'Sub 1.1', 'parent_id' => 1),
    array('id' => 3, 'title' => 'Sub 1.2', 'parent_id' => 1),
    array('id' => 4, 'title' => 'Sub 1.3', 'parent_id' => 1),
    array('id' => 5, 'title' => 'Menu 2', 'parent_id' => null),
    array('id' => 6, 'title' => 'Sub 2.1', 'parent_id' => 5),
    array('id' => 7, 'title' => 'Sub Sub 2.1.1', 'parent_id' => 6),
    array('id' => 8, 'title' => 'Sub 2.2', 'parent_id' => 5),
    array('id' => 9, 'title' => 'Menu 3', 'parent_id' => null)
);</code>
Salin selepas log masuk

Anda boleh menjana pepohon menu dengan memanggil fungsi:

<code class="php">$menu_html = build_menu($page_objects);</code>
Salin selepas log masuk

Ini akan menghasilkan senarai HTML yang diingini mewakili struktur menu bersarang.

Atas ialah kandungan terperinci Bagaimana dengan Cekap Mengubah Data Rata menjadi Menu Bersarang Hierarki dalam PHP dan MySQL tanpa Rekursi?. 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