Hiérarchie des catégories en PHP et MySQL
Dans une structure de base de données typique, les catégories sont organisées de manière hiérarchique, les catégories parent contenant des catégories enfants . Récupérer cette hiérarchie à partir d'une base de données MySQL peut être une tâche difficile. Cet article explore comment construire efficacement une hiérarchie de catégories à l'aide de PHP et MySQL.
Modèle de liste de contiguïté
Le modèle de liste de contiguïté représente les données hiérarchiques en stockant les relations parent-enfant dans un seul tableau. Chaque ligne du tableau contient l'ID de la catégorie et l'ID de son parent. Ce modèle permet une récupération efficace de l'arborescence des catégories à l'aide d'une seule requête SQL.
Génération de la hiérarchie
Pour générer la hiérarchie des catégories, nous utilisons le code PHP suivant :
<code class="php">$refs = array(); $list = array(); $sql = "SELECT item_id, parent_id, name FROM items ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['item_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['item_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['item_id']] = &$ref; } }</code>
Ce code parcourt l'ensemble de résultats, créant des références à chaque catégorie dans un tableau. Il utilise des relations parent-enfant pour créer un tableau multidimensionnel qui représente la hiérarchie.
Création d'une liste de sortie
Pour afficher la hiérarchie, nous utilisons une fonction récursive :
<code class="php">function toUL(array $array) { $html = '<ul>' . PHP_EOL; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>' . PHP_EOL; } $html .= '</ul>' . PHP_EOL; return $html; }</code>
Cette fonction prend le tableau multidimensionnel et génère une liste HTML non ordonnée représentant la hiérarchie des catégories. Il parcourt la hiérarchie de manière récursive, créant des listes imbriquées selon les besoins.
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!