Données plates vers un menu hiérarchique imbriqué :
Créer une arborescence de menus de liste non ordonnée à partir d'une base de données peut être une tâche courante dans le développement Web. Pour y parvenir en PHP et MySQL, sans recourir à la récursivité ni aux requêtes de base de données, vous pouvez utiliser un algorithme en un seul passage pour traiter vos objets de page.
Les objets de page fournis ont un attribut parent_id, indiquant les relations parent-enfant. . Pour construire l'arborescence du menu, vous aurez besoin d'une fonction comme celle-ci :
<code class="php">function build_menu($page_objects) { // Create an array to store parent-child relationships $parents = array(); // Loop through the page objects foreach ($page_objects as $page) { $parents[$page['id']] = $page['parent_id']; } // Initialize the menu string $menu = ''; // Loop through the page objects again foreach ($page_objects as $page) { // Check if the current page has no parent (root page) if (!isset($parents[$page['id']])) { $menu .= "<ul><li>{$page['title']}"; } // Handle child pages else { $parent_id = $parents[$page['id']]; // Find the parent 'ul' tag for the child page $parent_index = strrpos($menu, "<li>{$page_objects[$parent_id]['title']}"); // Append the child page to the parent 'ul' tag $menu = substr_replace($menu, "<li>{$page['title']}", $parent_index + strlen($page_objects[$parent_id]['title']) + 4, 0); } // Close the 'li' tag $menu .= '</li>'; // Handle closing the 'ul' tag for root pages if (!isset($parents[$page['parent_id']])) { $menu .= "</ul>"; } } return $menu; }</code>
Utilisation :
Par exemple, avec les objets de page fournis :
<code class="php">$page_objects = array( array('id' => 1, 'title' => 'Menu 1', 'parent_id' => null), array('id' => 2, 'title' => 'Sub 1.1', 'parent_id' => 1), array('id' => 3, 'title' => 'Sub 1.2', 'parent_id' => 1), array('id' => 4, 'title' => 'Sub 1.3', 'parent_id' => 1), array('id' => 5, 'title' => 'Menu 2', 'parent_id' => null), array('id' => 6, 'title' => 'Sub 2.1', 'parent_id' => 5), array('id' => 7, 'title' => 'Sub Sub 2.1.1', 'parent_id' => 6), array('id' => 8, 'title' => 'Sub 2.2', 'parent_id' => 5), array('id' => 9, 'title' => 'Menu 3', 'parent_id' => null) );</code>
Vous pouvez générer l'arborescence du menu en appelant la fonction :
<code class="php">$menu_html = build_menu($page_objects);</code>
Cela produira la liste HTML souhaitée représentant la structure du menu imbriqué.
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!