Maison >développement back-end >tutoriel php >Comment puis-je créer efficacement une structure arborescente à partir d'un tableau plat en PHP ?

Comment puis-je créer efficacement une structure arborescente à partir d'un tableau plat en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-02 15:33:15734parcourir

How Can I Efficiently Build a Tree Structure from a Flat Array in PHP?

Construire un arbre à partir d'un tableau plat en PHP

En PHP, il peut être difficile de construire une structure de données arborescente à partir d'un tableau plat . Cependant, cette tâche peut être simplifiée en appliquant la récursion et une compréhension de la relation parent-enfant au sein du tableau plat.

Étant donné un tableau plat où chaque élément a un « id » et un « parent_id », l'objectif est de le convertir en un arbre hiérarchique. Chaque élément de l'arbre résultant doit avoir une propriété « enfants » s'il contient des éléments enfants.

Solution

Le code fourni tente de créer l'arbre de manière récursive, mais il ne parvient pas à supprimer l'élément après l'avoir ajouté à la branche, ce qui entraîne plusieurs copies du même élément. Pour résoudre ce problème, nous devons supprimer l'élément du tableau plat après l'avoir ajouté à la branche.

function buildTree(array &$elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[$element['id']] = $element;
            unset($elements[$element['id']]);
        }
    }

    return $branch;
}

Explication

  1. Nous parcourons le tableau, vérifiant les éléments qui ont l'ID parent spécifié.
  2. Si un élément correspondant est trouvé, nous l'attribuons à une variable et récurons pour rassembler son children.
  3. Si l'élément a des enfants, nous les attribuons à la propriété 'children' de l'élément actuel.
  4. Après avoir ajouté l'élément à la branche, nous le supprimons du tableau plat pour éviter les doublons.
  5. Nous continuons ce processus de manière récursive jusqu'à ce que l'arbre entier soit construit.

Le tableau résultant sera un arbre hiérarchique avec chaque nœud contenant ses enfants sous forme de tableau imbriqué, fournissant une représentation claire des relations parent-enfant dans le tableau plat d'origine.

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