Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie erstelle ich in PHP ein baumstrukturiertes Menü ohne Rekursion oder mehrere Datenbankabfragen?

Barbara Streisand
Freigeben: 2024-10-27 14:46:01
Original
642 Leute haben es durchsucht

How to Build a Tree-Structured Menu in PHP Without Recursion or Multiple Database Queries?

Erstellen eines baumstrukturierten Menüs in PHP

Das Erstellen eines Menübaums mit PHP und MySQL umfasst die Darstellung einer hierarchischen Liste von Menüelementen aus einer Datenbank. Dieser Artikel befasst sich mit der Frage eines Benutzers, wie dies ohne Rekursion oder mehrmaliges Aufrufen der Datenbank erreicht werden kann.

Datenstruktur:

Das bereitgestellte Beispiel zeigt Seitenobjekte, die von a abgerufen wurden Datenbank, in der jedes Objekt eine ID, einen Titel und eine übergeordnete_ID hat. Eine parent_id von null gibt einen Menüpunkt auf Stammebene an.

<code class="php">page object
  id
  title
  parent_id</code>
Nach dem Login kopieren

Lösung:

Der empfohlene Ansatz besteht darin, die Menüpunkte in der Datenbank vorab zu sortieren, um sicherzustellen die gewünschte Reihenfolge. Dies kann durch Hinzufügen einer Gewichts- oder Sequenzspalte zum Datenbankschema und Sortieren der Abfrageergebnisse nach dieser Spalte erfolgen.

<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

Beispielausgabe:

Angesichts der bereitgestellte Menüelemente:

<code class="php">$menu = array(
  array('id'=>1,'title'=>'Menu 1',          'parent_id'=>null),
  array('id'=>2,'title'=>'Sub 1.1',         'parent_id'=>1),
  array('id'=>3,'title'=>'Sub 1.2',         'parent_id'=>1),
  array('id'=>4,'title'=>'Sub 1.3',         'parent_id'=>1),
  array('id'=>5,'title'=>'Menu 2',          'parent_id'=>null),
  array('id'=>6,'title'=>'Sub 2.1',         'parent_id'=>5),
  array('id'=>7,'title'=>'Sub Sub 2.1.1',   'parent_id'=>6),
  array('id'=>8,'title'=>'Sub 2.2',         'parent_id'=>5),
  array('id'=>9,'title'=>'Menu 3',          'parent_id'=>null),
);</code>
Nach dem Login kopieren

Der Aufruf von build_menu($menu) erzeugt die folgende HTML-Ausgabe:

<code class="html"><ul>
  <li>Menu 1
    <ul>
      <li>Sub 1.1</li>
      <li>Sub 1.2</li>
      <li>Sub 1.3</li>
    </ul>
  <li>Menu 2
    <ul>
      <li>Sub 2.1
        <ul>
          <li>Sub Sub 2.1.1</li>
        </ul>
      <li>Sub 2.2</li>
    </ul>
  <li>Menu 3</li>
</ul></code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich in PHP ein baumstrukturiertes Menü ohne Rekursion oder mehrere Datenbankabfragen?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!