Maison  >  Article  >  base de données  >  Comment créer un menu arborescent en PHP/MySQL sans récursion ?

Comment créer un menu arborescent en PHP/MySQL sans récursion ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 20:45:02895parcourir

How to Create a Tree Menu in PHP/MySQL Without Recursion?

Menu arborescent de construction PHP / MySQL sans récursion

Contexte :

Construire un menu arborescent à partir de données de base de données peut être un tâche commune. Cet article explique comment construire une arborescence de menus de liste non ordonnée (UL) à partir d'un tableau PHP d'objets de page sans utiliser la récursivité.

Configuration des données :

Vos objets de page ont les attributs suivants :

  • id
  • title
  • parent_id (défini sur null pour les pages racine)

Présentation des fonctions :

Nous allons créer une fonction qui prend un tableau d'objets de page et génère l'arborescence HTML UL correspondante.

Fonction d'assistance : has_children()

Cette fonction vérifie si une page a des pages enfants.

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

Fonction récursive Build_Menu()

La fonction build_menu() parcourt le tableau et génère l'arborescence HTML UL. Il utilise une variable $parent pour garder une trace de la page parent actuelle.

<code class="php">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>

Sortie :

Après avoir transmis le tableau d'objets de page au build_menu() fonction, vous pouvez faire écho à l’arborescence HTML UL résultante. Le résultat sera une structure de menu UL imbriquée représentant les données de votre base de données.

<code class="php">echo build_menu($menu);</code>

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!

Déclaration:
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