Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich einen ungeordneten Listenmenübaum in PHP/MySQL ohne Rekursion?

Wie erstelle ich einen ungeordneten Listenmenübaum in PHP/MySQL ohne Rekursion?

Patricia Arquette
Freigeben: 2024-11-03 19:24:29
Original
899 Leute haben es durchsucht

How to Build an Unordered List Menu Tree in PHP/MySQL Without Recursion?

PHP/MySQL-Aufbau ungeordneter Listenmenübäume: Ein nicht rekursiver Ansatz für einzelne Datenbankabfragen

Der Aufbau ungeordneter Listenmenübäume aus Datenbankabfragen ist eine gemeinsame Aufgabe. Typischerweise werden rekursive Funktionen verwendet, die die Datenbank mehrfach abfragen. Ein effizienterer, nicht rekursiver Ansatz ist jedoch mit einer einzigen Datenbankabfrage möglich.

Angesichts eines Arrays von Seitenobjekten mit den Attributen „id“, „title“ und „parent_id“ besteht das Ziel darin, eine Funktion zu erstellen, die den HTML-Code für generiert ein ungeordnetes Listenmenü.

Lösung:

Unsere Lösung verwendet die folgenden Schritte:

  1. Erstellen Sie eine Hilfsfunktion, has_children, um zu bestimmen wenn eine gegebene parent_id irgendwelche untergeordneten Elemente im Array hat.
  2. Implementieren Sie eine build_menu-Funktion, die die Seitenobjekte durchläuft und die Menüliste rekursiv erstellt.
  3. Rufen Sie build_menu mit der anfänglichen übergeordneten ID von 0 bis auf Erstellen Sie die Wurzel des Menübaums.

Code:

<code class="php">function has_children($rows, $id) {
  foreach ($rows as $row) {
    if ($row['parent_id'] == $id){
      return true;
    }
  }
  return false;
}

function build_menu($rows, $parent=0) {
  $result = "<ul>";
  foreach ($rows as $row) {
    if ($row['parent_id'] == $parent){
      $result.= "<li>{$row['title']}";
      if (has_children($rows,$row['id'])) {
        $result.= build_menu($rows,$row['id']);
      }
      $result.= "</li>";
    }
  }
  $result.= "</ul>";

  return $result;
}</code>
Nach dem Login kopieren

Beispielverwendung:

<code class="php">$menu = [
  ['id' => 1, 'title' => 'Menu 1', 'parent_id' => null],
  ... // Additional menu objects
];

echo build_menu($menu); // Outputs the complete menu list</code>
Nach dem Login kopieren

Vorteile:

  • Der nicht rekursive Ansatz eliminiert das Risiko eines Stapelüberlaufs.
  • Einzelne Datenbankabfrage gewährleistet einen effizienten Datenabruf.
  • Das modulare Design erleichtert die Wartbarkeit und Wiederverwendbarkeit.

Das obige ist der detaillierte Inhalt vonWie erstelle ich einen ungeordneten Listenmenübaum in PHP/MySQL ohne Rekursion?. 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