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
Susan Sarandonasal
2024-10-31 19:23:29921semak imbas

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>

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>

Anda boleh menjana pepohon menu dengan memanggil fungsi:

<code class="php">$menu_html = build_menu($page_objects);</code>

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!

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