In einem verschachtelten Menüsystem kann jeder Menüpunkt untergeordnete Menüpunkte haben , die wiederum eigene untergeordnete Elemente haben können. Das Ziel besteht darin, diese verschachtelten Menüebenen effektiv aus einer Datenbank abzurufen und anzuzeigen.
Um dies zu erreichen, können wir einen nicht rekursiven Ansatz verwenden, der Folgendes beinhaltet :
Hier ist eine PHP-Funktion, die den oben genannten Ansatz demonstriert:
<code class="php">function generateMenu($items) { $html = ''; $parent = 0; $parentStack = array(); $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while (($option = each($children[$parent])) || ($parent > 0)) { if (!empty($option)) { // 1) Item with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['title'] . '</li>'; $html .= '<ul>'; array_push($parentStack, $parent); $parent = $option['value']['id']; } // 2) Item without children else { $html .= '<li>' . $option['value']['title'] . '</li>'; } } // 3) Current parent has no more children else { $html .= '</ul>'; $parent = array_pop($parentStack); } } return $html; }</code>
Um die Funktion zu verwenden, rufen Sie zunächst die Menüelemente aus der Datenbank ab und übergeben Sie sie als Array an die Funktion genericMenu(). Der resultierende HTML-Code wird eine Reihe verschachtelter ungeordneter Listen sein, die die hierarchische Menüstruktur darstellen.
Dieser nicht-rekursive Ansatz eliminiert das Risiko von Endlosschleifen, die bei auftreten können Rekursion, was es zu einer stabileren und effizienteren Lösung zum Generieren verschachtelter Menüs macht.
Das obige ist der detaillierte Inhalt vonWie baut man mit PHP und MySQL ein grenzenloses verschachteltes Menüsystem auf: Ein nicht rekursiver Ansatz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!