Echo-Menübaum mit rekursiver Funktion
Problem:
Konstruieren einer rekursiven Funktion für eine bestimmte Datenstruktur ist eine häufige Herausforderung. Hier ist eine Situation, in der eine rekursive Funktion erforderlich ist, um ein hierarchisches Menü anzuzeigen.
Situation:
Angenommen, eine MySQL-Datenbanktabelle, in der die Stammspalte die übergeordnete Kategorie für jeden Datensatz angibt, erstellen Sie ein HTML-Menübaum mit mehreren Ebenen. Die gewünschte HTML-Struktur ist:
<code class="html"><li><a href="#"><p class="Tier0">Datori</p></a> <ul style="display: block"> <li><a href="#"><p class="Tier1">Cookies</p></a></li> <li><a href="#"><p class="Tier1">Events</p></a></li> <li><a href="#"><p class="Tier1">Forms</p></a></li> <li><a href="#"><p class="Tier1">Games</p></a></li> <li><a href="#"><p class="Tier1">Images</p></a> <ul> <li><a href="#"><p class="Tier2">CSS</p></a></li> <li><a href="#"><p class="Tier2">JavaScript</p></a></li> <li><a href="#"><p class="Tier2">JQuery</p></a></li> </ul> </li> <li><a href="#"><p class="Tier1">Navigations</p></a> <ul> <li><a href="#"><p class="Tier2">CSS</p></a></li> <li><a href="#"><p class="Tier2">JavaScript</p></a></li> <li><a href="#"><p class="Tier2">JQuery</p></a></li> </ul> </li> <li><a href="#"><p class="Tier1">Tabs</p></a></li> </ul> </li> <li><a href="#"><p class="Tier0">Washing Machines</p></a></li></code>
Funktion:
Eine rekursive Funktion zum Generieren der HTML-Baumstruktur lautet wie folgt:
<code class="php">function recurse($categories, $parent = null, $level = 0) { $ret = '<ul>'; foreach($categories as $index => $category) { if($category['root'] == $parent) { $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>'; $ret .= $this->recurse($categories, $category['id'], $level+1); $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
Ausführung:
<code class="php">// Fetch categories from the database $categories = { get from database into a multi-dimensional array }; // Generate HTML tree $Tree = $this->recurse($categories); // Output the result echo $Tree;</code>
Optimierungen:
Um leere verschachtelte
<code class="php">function recurse($categories, $parent = null, $level = 0) { $ret = '<ul>'; foreach($categories as $index => $category) { if($category['root'] == $parent) { $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>'; $sub = $this->recurse($categories, $category['id'], $level+1); if($sub != '<ul></ul>') $ret .= $sub; $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
Für eine optimale Leistung sollten Sie erwägen, der Datenbanktabelle eine ChildCount-Spalte hinzuzufügen, die die Anzahl der untergeordneten Kategorien für jedes übergeordnete Element angibt, und diese ändern entsprechend funktionieren. Dies vermeidet unnötige Datenbanksuchen während der Rekursion.
Das obige ist der detaillierte Inhalt vonWie kann eine rekursive Funktion verwendet werden, um aus einer hierarchischen MySQL-Datenbanktabelle einen mehrstufigen HTML-Menübaum zu generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!