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

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

Susan Sarandon
Susan SarandonOriginal
2024-10-30 01:41:28224Durchsuche

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>

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>

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!

Stellungnahme:
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