Heim > Datenbank > MySQL-Tutorial > Wie kann man flache Daten effizient und ohne Rekursion in ein hierarchisch verschachteltes Menü in PHP und MySQL umwandeln?

Wie kann man flache Daten effizient und ohne Rekursion in ein hierarchisch verschachteltes Menü in PHP und MySQL umwandeln?

Susan Sarandon
Freigeben: 2024-10-31 19:23:29
Original
927 Leute haben es durchsucht

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

Flache Daten zu hierarchisch verschachteltem Menü:

Der Aufbau eines ungeordneten Listenmenübaums aus einer Datenbank kann eine häufige Aufgabe in der Webentwicklung sein. Um dies in PHP und MySQL zu erreichen, ohne auf Rekursion und Datenbankabfragen zurückgreifen zu müssen, können Sie einen Single-Pass-Algorithmus zur Verarbeitung Ihrer Seitenobjekte verwenden.

Die bereitgestellten Seitenobjekte verfügen über ein parent_id-Attribut, das Eltern-Kind-Beziehungen angibt . Um den Menübaum zu erstellen, benötigen Sie eine Funktion wie diese:

<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>
Nach dem Login kopieren

Verwendung:

Zum Beispiel mit den bereitgestellten Seitenobjekten:

<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>
Nach dem Login kopieren

Sie können den Menübaum generieren, indem Sie die Funktion aufrufen:

<code class="php">$menu_html = build_menu($page_objects);</code>
Nach dem Login kopieren

Dadurch wird die gewünschte HTML-Liste erstellt, die die verschachtelte Menüstruktur darstellt.

Das obige ist der detaillierte Inhalt vonWie kann man flache Daten effizient und ohne Rekursion in ein hierarchisch verschachteltes Menü in PHP und MySQL umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage