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.
Pour y parvenir, nous pouvons utiliser une approche non récursive qui implique :
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>
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.
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!