Construction d'arborescence de menus de listes non ordonnées PHP/MySQL : une approche de requête de base de données unique non récursive
Construire des arborescences de menus de listes non ordonnées à partir de requêtes de base de données est une tâche commune. En règle générale, des fonctions récursives qui interrogent la base de données plusieurs fois sont utilisées. Cependant, une approche non récursive plus efficace est possible en utilisant une seule requête de base de données.
Étant donné un tableau d'objets de page avec les attributs id, title et parent_id, l'objectif est de créer une fonction qui génère le code HTML pour un menu de liste non ordonné.
Solution :
Notre solution utilise les étapes suivantes :
Code :
<code class="php">function has_children($rows, $id) { foreach ($rows as $row) { if ($row['parent_id'] == $id){ return true; } } return false; } function build_menu($rows, $parent=0) { $result = "<ul>"; foreach ($rows as $row) { if ($row['parent_id'] == $parent){ $result.= "<li>{$row['title']}"; if (has_children($rows,$row['id'])) { $result.= build_menu($rows,$row['id']); } $result.= "</li>"; } } $result.= "</ul>"; return $result; }</code>
Exemple d'utilisation :
<code class="php">$menu = [ ['id' => 1, 'title' => 'Menu 1', 'parent_id' => null], ... // Additional menu objects ]; echo build_menu($menu); // Outputs the complete menu list</code>
Avantages :
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!