Maison >base de données >tutoriel mysql >Comment créer une arborescence de menu Echo à l'aide d'une fonction récursive en PHP ?

Comment créer une arborescence de menu Echo à l'aide d'une fonction récursive en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 06:58:291001parcourir

 How to Create an Echo Menu Tree Using a Recursive Function in PHP?

Arbre de menu d'écho avec fonction récursive

Aperçu du problème

Création d'une fonction récursive pour parcourir une structure de menu hiérarchique stockée dans une base de données et la générer dans HTML peut être un défi. Étant donné un tableau avec des catégories et leurs catégories parentes, la tâche consiste à générer une arborescence de menus qui représente visuellement la hiérarchie.

Approche des fonctions récursives

Pour résoudre ce problème, une fonction récursive est nécessaire. L'idée est de commencer par la catégorie racine, de trouver ses enfants et d'appeler récursivement la fonction sur chaque enfant, en construisant la sortie HTML au fur et à mesure.

Implémentation de la fonction PHP

Voici un implémentation possible de la fonction PHP :

<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>
  1. Elle prend trois paramètres : $categories (un tableau de données de catégorie), $parent (l'ID de catégorie parent actuel) et $level (qui détermine le niveau d'indentation).
  2. Il parcourt les catégories et vérifie si leur racine correspond à l'ID parent fourni.
  3. S'il y a une correspondance, il affiche le nom de la catégorie, enveloppé dans un li et un élément avec une classe Tier appropriée pour l'indentation.
  4. Il s'appelle ensuite de manière récursive avec le niveau de catégories suivant, définissant le nouvel ID parent et incrémentant le niveau.

Utilisation

Pour utiliser la fonction :

  1. Interrogez la base de données pour récupérer toutes les catégories.
  2. Appelez recurse() avec les données de la catégorie comme premier paramètre.
  3. Faites écho à la sortie HTML renvoyée.

Gestion des catégories enfants vides

L'implémentation initiale peut produire des fichiers

    éléments pour les catégories sans enfants. Pour éviter cela, vous pouvez modifier la fonction comme ceci :

    <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 modification garantit que seules les catégories avec des enfants ont

      Vous pouvez également ajouter un nombre d'enfants à chaque catégorie et inclure uniquement les éléments

        si le nombre d'enfants est supérieur à zéro.

        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