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
Patricia ArquetteOriginal
2024-11-03 19:24:29924Durchsuche

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>

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>

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!

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