Maison >développement back-end >tutoriel php >Comment convertir efficacement une liste de tableaux plats en une structure arborescente hiérarchique ?

Comment convertir efficacement une liste de tableaux plats en une structure arborescente hiérarchique ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-29 14:41:10605parcourir

How to Efficiently Convert a Flat Array List into a Hierarchical Tree Structure?

Conversion d'une liste de tableaux en une structure arborescente

Dans ce problème, nous sommes chargés de transformer un tableau plat d'éléments en une structure arborescente hiérarchique. Le tableau d'entrée se compose d'objets avec trois propriétés : id, parentid et name. La sortie doit être une structure arborescente où chaque nœud représente un élément du tableau d'entrée et possède une liste de nœuds enfants qui lui appartiennent.

Pour résoudre ce problème, nous ne pouvons pas nous fier à des méthodes telles que les ensembles imbriqués en raison de contraintes de base de données. Au lieu de cela, nous utilisons un algorithme récursif pour construire l'arborescence.

$arr = array(
    array('id' => 100, 'parentid' => 0, 'name' => 'a'),
    array('id' => 101, 'parentid' => 100, 'name' => 'a'),
    array('id' => 102, 'parentid' => 101, 'name' => 'a'),
    array('id' => 103, 'parentid' => 101, 'name' => 'a'),
);

$new = array();
foreach ($arr as $a) {
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));

Dans la première étape, nous parcourons le tableau d'entrée et regroupons les éléments par leur identifiant parent pour créer un nouveau tableau où chaque clé représente l'identifiant d'un parent. , et la valeur est un tableau de ses enfants. Par la suite, nous invoquons une fonction d'assistance createTree pour construire l'arbre de manière récursive.

function createTree(&$list, $parent) {
    $tree = array();
    foreach ($parent as $k => $l) {
        if (isset($list[$l['id']])) {
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    }
    return $tree;
}

La fonction createTree prend deux paramètres : le tableau réorganisé $list et un tableau $parent représentant le niveau actuel dans l'arborescence. Dans la fonction, nous parcourons le tableau $parent et vérifions si la $list contient des enfants pour l'élément actuel. Si des enfants sont trouvés, nous invoquons récursivement createTree pour construire le sous-arbre pour cet élément et l'ajoutons en tant que propriété children de l'élément actuel. Enfin, nous ajoutons l'élément actuel au tableau $tree et renvoyons l'arbre.

En suivant cet algorithme, nous pouvons construire efficacement une structure arborescente à partir de la liste de tableaux fournie, générant une représentation imbriquée des relations hiérarchiques entre les éléments.

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