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 ?
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é.
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; }
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!