Création de menus à niveaux illimités avec PHP et MySQL
Pour créer des menus complexes avec plusieurs niveaux et sous-menus, une approche courante consiste à utiliser une base de données structure pour organiser les éléments de menu. Dans de telles structures, les menus de niveau supérieur ont généralement un ID parent de 0, tandis que les sous-menus se voient attribuer l'ID de leur menu parent.
Un défi se pose lorsque vous devez vérifier les sous-menus de manière récursive et les afficher dans leurs emplacements respectifs. lister les éléments. Voici comment y parvenir en utilisant PHP et MySQL :
Requête MySQL :
SELECT id, parent_id, name, link, position FROM menu_item ORDER BY parent_id, position;
Cette requête récupère tous les éléments de menu dans un ordre hiérarchique en fonction de leur parent-enfant. relations.
Implémentation PHP :
<code class="php">$html = ''; $parent = 0; // Starting with the top-level menu $parent_stack = array(); // Keeps track of parent menu IDs // Map menu items by their parent ID $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while ( // If there are more children at the current parent level ($option = each($children[$parent])) || // Or if we need to backtrack to a previous parent level ($parent > 0) ) { if (!empty($option)) { // Handle menu items with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['name'] . '</li>'; $html .= '<ul class="submenu">'; array_push($parent_stack, $parent); // Push current parent ID to the stack $parent = $option['value']['id']; // Set current parent to the current menu item's ID } // Handle menu items without children else { $html .= '<li>' . $option['value']['name'] . '</li>'; } } else { // Backtrack to the previous menu level $html .= '</ul>'; $parent = array_pop($parent_stack); // Pop the last parent ID from the stack } } // Output the resulting HTML echo $html;</code>
Explication :
Cette approche offre un moyen flexible et efficace de créer des menus avec des niveaux illimités de sous-menus. sans le risque de boucles infinies qui peuvent se produire avec récursion.
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!