Maison  >  Article  >  base de données  >  Comment récupérer tous les nœuds enfants imbriqués d'un parent spécifique dans une arborescence à l'aide d'une fonction PHP récursive ?

Comment récupérer tous les nœuds enfants imbriqués d'un parent spécifique dans une arborescence à l'aide d'une fonction PHP récursive ?

DDD
DDDoriginal
2024-11-06 11:48:02506parcourir

How to retrieve all nested child nodes of a specific parent in a tree structure using a recursive PHP function?

Conception d'une fonction récursive pour récupérer des nœuds enfants imbriqués avec PHP

Dans les cas où les données sont stockées dans un format de liste de contiguïté, une fonction récursive peut récupérer efficacement les enfants et petits-enfants nœuds pour un nœud parent spécifique. Cette approche offre une solution sur mesure pour identifier tous les nœuds situés sous un parent donné.

Implémentation

Voici une implémentation d'une fonction récursive qui accomplit cette tâche :

function fetch_recursive($tree, $parent_id, $parent_found = false, $list = array())
{
    foreach ($tree as $key => $node) {
        if ($parent_found || $key == $parent_id) {
            $row_data = array();
            foreach ($node as $field => $value) {
                if ($field != 'children') {
                    $row_data[$field] = $value;
                }
            }
            $list[] = $row_data;

            if (isset($node['children']) && !empty($node['children'])) {
                $list = array_merge($list, fetch_recursive($node['children'], $parent_id, true));
            }
        } elseif (isset($node['children']) && !empty($node['children'])) {
            $list = array_merge($list, fetch_recursive($node['children'], $parent_id));
        }
    }

    return $list;
}

Utilisation

En supposant que vous avez déjà construit une structure arborescente à partir des données à l'aide d'une fonction distincte, vous pouvez utiliser cette fonction récursive pour récupérer tous les nœuds enfants et petits-enfants pour un nœud parent spécifique.

Par exemple, si vous avez un arbre structuré comme suit :

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => Electronics 
            [parent_id] => 0 
            [children] => Array
                (
                    [2] => Array
                        ( 
                            [id] => 2
                            [name] => Televisions 
                            [parent_id] => 1 
                            [children] => Array
                                (
                                    [4] => Array
                                        (
                                            [id] => 4
                                            [name] => Tube 
                                            [parent_id] => 2
                                            [children] => Array()
                                        )
                                    [5] => Array
                                        (
                                            [id] => 5
                                            [name] => LCD 
                                            [parent_id] => 2
                                            [children] => Array()
                                        )
                                    [6] => Array
                                        (
                                            [id] => 6
                                            [name] => Plasma 
                                            [parent_id] => 2
                                            [children] => Array()
                                        )
                                )
                        )
                    [3] => Array 
                        (
                            [id] => 3
                            [name] => Portable Electronics 
                            [parent_id] => 1
                            [children] => Array
                                (
                                    [7] => Array
                                        (
                                            [id] => 7
                                            [name] => Mp3 Players 
                                            [parent_id] => 3 
                                            [children] => Array
                                                (
                                                    [10] => Array
                                                        (
                                                            [id] => 10
                                                            [name] => Flash 
                                                            [parent_id] => 7
                                                            [children] => Array()
                                                        ) 
                                                )
                                        )
                                    [8] => Array 
                                        (
                                            [id] => 8
                                            [name] => CD Players 
                                            [parent_id] => 3
                                            [children] => Array()
                                        )
                                    [9] => Array 
                                        (
                                            [id] => 9
                                            [name] => 2 Way Radios 
                                            [parent_id] => 3
                                            [children] => Array()
                                        )
                                )
                        )
                )
        )
)

Pour récupérer tous les nœuds enfants, disons, du nœud avec l'ID 3, vous appelleriez la fonction comme ceci :

$parent_id = 3;
$child_nodes = fetch_recursive($tree, $parent_id);

Le La variable $child_nodes contiendra désormais un tableau avec tous les nœuds enfants du nœud avec l'ID 3, tel que :

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Portable Electronics
            [parent_id] => 1
        )

    [1] => Array
        (
            [id] => 7
            [name] => Mp3 Players
            [parent_id] => 3
        )

    [2] => Array
        (
            [id] => 10
            [name] => Flash
            [parent_id] => 7
        )

    [3] => Array
        (
            [id] => 8
            [name] => CD Players
            [parent_id] => 3
        )

    [4] => Array
        (
            [id] => 9
            [name] => 2 Way Radios
            [parent_id] => 3
        )

)

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