Maison > Article > base de données > Comment la récursivité peut-elle être utilisée pour générer une arborescence de menus imbriquée à partir d'une base de données avec des catégories parent ?
Récursion pour la génération de l'arborescence de menus
Dans votre situation, vous disposez d'une structure de base de données où les catégories ont un champ « racine » indiquant leur catégorie parent . La sortie HTML que vous désirez implique des listes imbriquées représentant la hiérarchie des catégories. Pour y parvenir, une fonction PHP récursive peut être utilisée.
Voici un exemple de fonction :
<code class="php">function recurse($categories, $parent = null, $level = 0) { $ret = '<ul>'; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>'; $ret .= $this->recurse($categories, $category['id'], $level + 1); $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
Cette fonction suppose que les catégories racines ont un champ « racine » avec une valeur nulle. Il parcourt les catégories, identifie les catégories enfants en fonction de leur champ « racine » et construit le code HTML à l'aide de listes imbriquées.
Pour utiliser cette fonction :
Facultativement, vous pouvez modifier la fonction pour éviter les listes vides en vérifiant si la catégorie a des catégories enfants avant de créer la liste :
<code class="php">function recurse($categories, $parent = null, $level = 0) { $ret = '<ul>'; foreach ($categories as $index => $category) { if ($category['root'] == $parent) { $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>'; $sub = $this->recurse($categories, $category['id'], $level + 1); if ($sub != '<ul></ul>') { $ret .= $sub; } $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
Cette fonction modifiée ne créera des listes que si la catégorie a au moins un enfant.
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!