Maison >développement back-end >tutoriel php >Comment convertir efficacement un tableau d'enregistrements en une structure arborescente imbriquée ?

Comment convertir efficacement un tableau d'enregistrements en une structure arborescente imbriquée ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-29 12:55:11561parcourir

How to Efficiently Convert an Array of Records into a Nested Tree Structure?

Comment convertir efficacement un tableau d'enregistrements en une structure arborescente

Dans ce scénario, vous disposez d'un tableau d'enregistrements représentant une structure hiérarchique . Chaque enregistrement possède un identifiant, un identifiant parent et un nom. L'objectif est de transformer ce tableau en une structure arborescente imbriquée, où le nœud racine a des nœuds enfants, qui à leur tour peuvent avoir leurs propres nœuds enfants.

Pour y parvenir, une fonction récursive nommée createTree est utilisée. Cette fonction prend deux paramètres : une référence au tableau d'enregistrements et un tableau parent. Il parcourt le tableau parent et pour chaque parent, il vérifie s'il existe des enregistrements enfants dans le tableau d'enregistrements. Si des enregistrements enfants existent, il appelle la fonction createTree de manière récursive pour les traiter et attribue le résultat à la propriété children du parent.

Voici un exemple :

$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]));
print_r($tree);

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;
}

Ce code sera afficher la structure arborescente souhaitée. La fonction createTree convertit de manière récursive les enregistrements parents en enfants, créant ainsi une représentation arborescente hiérarchique des données. Notez que la fonction opère sur une référence au tableau d'entrée, permettant aux modifications d'être propagées au tableau 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