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

Comment créer un système de menus imbriqués illimités avec PHP et MySQL : une approche non récursive ?

Linda Hamilton
Libérer: 2024-10-29 18:41:12
original
496 Les gens l'ont consulté

How to Build a Limitless Nested Menu System with PHP and MySQL: A Non-Recursive Approach?

Comment afficher des menus imbriqués illimités en PHP et MySQL

Description du problème

Dans un système de menus imbriqués, chaque élément de menu peut avoir des éléments de menu enfants , qui peuvent à leur tour avoir leurs propres éléments enfants. L'objectif est de récupérer et d'afficher efficacement ces niveaux de menu imbriqués à partir d'une base de données.

Implémentation du code

Pour y parvenir, nous pouvons utiliser une approche non récursive qui implique :

  • Requête de base de données : Nous interrogeons la table menu_item, en classant les résultats par parent et position.
  • Tableau multidimensionnel : Nous organisons les éléments de menu récupérés dans un tableau multidimensionnel, où chaque élément représente une relation parent-enfant.
  • Tree Traversal : Nous parcourons ce tableau à l'aide d'une boucle.
  • Génération HTML : Nous générons dynamiquement la structure HTML pour les menus imbriqués.

Fonction PHP

Voici une fonction PHP qui démontre l'approche ci-dessus :

<code class="php">function generateMenu($items) {
    $html = '';
    $parent = 0;
    $parentStack = array();

    $children = array();
    foreach ($items as $item) {
        $children[$item['parent_id']][] = $item;
    }

    while (($option = each($children[$parent])) || ($parent > 0)) {
        if (!empty($option)) {
            // 1) Item with children
            if (!empty($children[$option['value']['id']])) {
                $html .= '<li>' . $option['value']['title'] . '</li>';
                $html .= '<ul>';
                array_push($parentStack, $parent);
                $parent = $option['value']['id'];
            }
            // 2) Item without children
            else {
                $html .= '<li>' . $option['value']['title'] . '</li>';
            }
        }
        // 3) Current parent has no more children
        else {
            $html .= '</ul>';
            $parent = array_pop($parentStack);
        }
    }

    return $html;
}</code>
Copier après la connexion

Utilisation

Pour utiliser la fonction, récupérez d'abord les éléments de menu de la base de données et transmettez-les sous forme de tableau à la fonction generateMenu(). Le HTML résultant sera une série de listes non ordonnées imbriquées représentant la structure hiérarchique du menu.

Avantages de l'approche non récursive

Cette approche non récursive élimine le risque de boucles infinies qui peuvent se produire avec récursivité, ce qui en fait une solution plus stable et efficace pour générer des menus imbriqués.

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