Maison > base de données > tutoriel mysql > le corps du texte

Comment créer un menu arborescent en PHP sans récursion ni requêtes de bases de données multiples ?

Barbara Streisand
Libérer: 2024-10-27 14:46:01
original
642 Les gens l'ont consulté

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

Créer un menu arborescent en PHP

Construire une arborescence de menu à l'aide de PHP et MySQL implique de présenter une liste hiérarchique d'éléments de menu à partir d'une base de données. Cet article répond à la requête d'un utilisateur sur la façon d'y parvenir sans récursion ni accès à la base de données plusieurs fois.

Structure des données :

L'exemple fourni décrit les objets de page récupérés à partir d'un base de données, où chaque objet a un identifiant, un titre et un parent_id. Un parent_id de null indique un élément de menu au niveau racine.

<code class="php">page object
  id
  title
  parent_id</code>
Copier après la connexion

Solution :

L'approche recommandée consiste à pré-trier les éléments de menu dans la base de données pour garantir l'ordre souhaité. Cela peut être fait en ajoutant une colonne de poids ou de séquence au schéma de base de données et en classant les résultats de la requête en fonction de cette colonne.

<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>
Copier après la connexion

Exemple de résultat :

Étant donné le éléments de menu fournis :

<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>
Copier après la connexion

L'appel de build_menu($menu) produira la sortie HTML suivante :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!