Heim >Datenbank >MySQL-Tutorial >Wie kann man flache Daten effizient und ohne Rekursion in ein hierarchisch verschachteltes Menü in PHP und MySQL umwandeln?
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>
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>
Sie können den Menübaum generieren, indem Sie die Funktion aufrufen:
<code class="php">$menu_html = build_menu($page_objects);</code>
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!