Erstellen von Menüs mit unbegrenzten Ebenen mit PHP und MySQL
Um komplexe Menüs mit mehreren Ebenen und Untermenüs zu erstellen, ist ein gängiger Ansatz die Verwendung einer Datenbank Struktur zum Organisieren von Menüpunkten. In solchen Strukturen haben Menüs der obersten Ebene normalerweise die übergeordnete ID 0, während Untermenüs die ID ihres übergeordneten Menüs zugewiesen wird.
Eine Herausforderung entsteht, wenn Sie rekursiv nach Untermenüs suchen und diese in ihren jeweiligen Menüs anzeigen müssen Elemente auflisten. So erreichen Sie dies mit PHP und MySQL:
MySQL-Abfrage:
SELECT id, parent_id, name, link, position FROM menu_item ORDER BY parent_id, position;
Diese Abfrage ruft alle Menüelemente in einer hierarchischen Reihenfolge basierend auf ihrem Eltern-Kind-Menü ab Beziehungen.
PHP Implementierung:
<code class="php">$html = ''; $parent = 0; // Starting with the top-level menu $parent_stack = array(); // Keeps track of parent menu IDs // Map menu items by their parent ID $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while ( // If there are more children at the current parent level ($option = each($children[$parent])) || // Or if we need to backtrack to a previous parent level ($parent > 0) ) { if (!empty($option)) { // Handle menu items with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['name'] . '</li>'; $html .= '<ul class="submenu">'; array_push($parent_stack, $parent); // Push current parent ID to the stack $parent = $option['value']['id']; // Set current parent to the current menu item's ID } // Handle menu items without children else { $html .= '<li>' . $option['value']['name'] . '</li>'; } } else { // Backtrack to the previous menu level $html .= '</ul>'; $parent = array_pop($parent_stack); // Pop the last parent ID from the stack } } // Output the resulting HTML echo $html;</code>
Erklärung:
Dieser Ansatz bietet eine flexible und effiziente Möglichkeit zum Erstellen Menüs mit unbegrenzten Untermenüebenen ohne das Risiko von Endlosschleifen, die bei der Rekursion auftreten können.
Das obige ist der detaillierte Inhalt vonWie erstellt man Menüs mit unbegrenzter Ebene mit PHP und MySQL: Eine rekursive Lösung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!