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 ?

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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 01:41:28130parcourir

How can recursion be used to generate a nested menu tree from a database with parent categories?

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 :

  1. Interrogez votre base de données pour un tableau multidimensionnel de catégories.
  2. Appelez la fonction récursive avec le tableau de catégories et null comme paramètre parent.
  3. Attribuez la valeur renvoyée à une variable (par exemple, $Tree).
  4. Faites écho à la variable $Tree pour afficher l'arborescence du menu imbriquée.

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!

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