Maison >base de données >tutoriel mysql >Comment construire une hiérarchie de catégories en PHP et MySQL ?

Comment construire une hiérarchie de catégories en PHP et MySQL ?

DDD
DDDoriginal
2024-10-23 21:01:30564parcourir

How to Construct a Category Hierarchy in PHP and MySQL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn