Heim  >  Artikel  >  Datenbank  >  Wie baut man mit PHP und MySQL ein grenzenloses verschachteltes Menüsystem auf: Ein nicht rekursiver Ansatz?

Wie baut man mit PHP und MySQL ein grenzenloses verschachteltes Menüsystem auf: Ein nicht rekursiver Ansatz?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 18:41:12428Durchsuche

How to Build a Limitless Nested Menu System with PHP and MySQL: A Non-Recursive Approach?

So zeigen Sie unbegrenzt verschachtelte Menüs in PHP und MySQL an

Problembeschreibung

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.

Code-Implementierung

Um dies zu erreichen, können wir einen nicht rekursiven Ansatz verwenden, der Folgendes beinhaltet :

  • Datenbankabfrage: Wir fragen die Tabelle „menu_item“ ab und ordnen die Ergebnisse nach ihrem übergeordneten Element und ihrer Position.
  • Mehrdimensionales Array : Wir organisieren die abgerufenen Menüelemente in einem mehrdimensionalen Array, in dem jedes Element eine Eltern-Kind-Beziehung darstellt.
  • Baumdurchquerung: Wir durchlaufen dieses Array mithilfe einer Schleife.
  • HTML-Generierung: Wir generieren dynamisch die HTML-Struktur für die verschachtelten Menüs.

PHP-Funktion

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>

Verwendung

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.

Vorteile des nicht-rekursiven Ansatzes

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!

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