Echoender Menübaum mit rekursiver Funktion
In dem Szenario, in dem Sie eine MySQL-Datenbank mit hierarchischen Daten haben, die unter verschiedenen Wurzeln organisiert sind, kann es vorkommen, dass Sie auf Folgendes stoßen: die Notwendigkeit, einen HTML-Menübaum zu generieren, der diese Struktur repliziert. Dazu gehört die rekursive Anzeige der Stammkategorien und ihrer Unterkategorien.
Um dies zu erreichen, kann eine rekursive PHP-Funktion verwendet werden, um die Datenbankdatensätze zu durchlaufen und das HTML-Markup zu erstellen. Die Funktion benötigt die Kategoriendaten und optional eine übergeordnete Kennung und Tiefenebene.
Die Funktion durchläuft die Kategorien und sucht nach Elementen, die mit dem angegebenen übergeordneten Element übereinstimmen. Wenn eine Übereinstimmung gefunden wird, wird ein
Die folgende überarbeitete PHP-Funktion enthält Optimierungen, um leere
<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>
Um die Leistung zu verbessern, empfiehlt es sich, die Datenbank abzufragen und ein Feld aufzunehmen, das die Anzahl der untergeordneten Kategorien für jede Kategorie angibt. Diese Informationen können verwendet werden, um zu bestimmen, ob untergeordnete Kategorien rekursiv durchlaufen werden sollen:
<code class="php">select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category</code>
Mit dieser Erweiterung kann die Rekursionsfunktion entsprechend geändert werden:
<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>'; if ($category['ChildCount'] > 0) { $ret .= $this->recurse($categories, $category['id'], $level + 1); } $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe einer rekursiven PHP-Funktion effizient einen HTML-Menübaum aus hierarchischen Daten generieren, die in einer MySQL-Datenbank gespeichert sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!