Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann Rekursion verwendet werden, um einen verschachtelten Menübaum aus einer Datenbank mit übergeordneten Kategorien zu generieren?

Susan Sarandon
Freigeben: 2024-10-30 01:41:28
Original
194 Leute haben es durchsucht

How can recursion be used to generate a nested menu tree from a database with parent categories?

Rekursion zur Menübaumgenerierung

In Ihrer Situation haben Sie eine Datenbankstruktur, in der Kategorien ein „Stamm“-Feld haben, das ihre übergeordnete Kategorie angibt . Die gewünschte HTML-Ausgabe umfasst verschachtelte Listen, die die Kategoriehierarchie darstellen. Um dies zu erreichen, kann eine rekursive PHP-Funktion eingesetzt werden.

Hier ist eine Beispielfunktion:

<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>
Nach dem Login kopieren

Diese Funktion geht davon aus, dass Stammkategorien ein „Stamm“-Feld mit einem Nullwert haben. Es durchläuft die Kategorien, identifiziert untergeordnete Kategorien anhand ihres „Stamm“-Felds und erstellt den HTML-Code mithilfe verschachtelter Listen.

So verwenden Sie diese Funktion:

  1. Fragen Sie Ihre Datenbank nach a ab mehrdimensionales Array von Kategorien.
  2. Rufen Sie die Rekursionsfunktion mit dem Array von Kategorien und Null als übergeordnetem Parameter auf.
  3. Weisen Sie den zurückgegebenen Wert einer Variablen zu (z. B. $Tree).
  4. Echo der $Tree-Variable, um den verschachtelten Menübaum anzuzeigen.

Optional können Sie die Funktion ändern, um leere Listen zu vermeiden, indem Sie vor dem Erstellen der Liste prüfen, ob die Kategorie untergeordnete Kategorien hat:

<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>
Nach dem Login kopieren

Diese modifizierte Funktion erstellt nur Listen, wenn die Kategorie mindestens ein untergeordnetes Element hat.

Das obige ist der detaillierte Inhalt vonWie kann Rekursion verwendet werden, um einen verschachtelten Menübaum aus einer Datenbank mit übergeordneten Kategorien zu generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage