Obtenir les nœuds enfants, petits-enfants et descendants à l'aide de PHP avec les résultats de la requête MySQL
Cette requête récupère les données d'une table MySQL avec une liste de contiguïté structure, où chaque ligne représente un nœud et sa relation avec son parent. L'objectif est de transformer ces données en un tableau qui inclut tous les nœuds enfants, petits-enfants et descendants sous un ID parent spécifié tout en incorporant le nœud parent lui-même.
Utilisation d'une fonction récursive : fetch_recursive
La fonction fetch_recursive parcourt le tableau de données, en commençant par l'ID parent donné, et ajoute récursivement des éléments enfants jusqu'à ce que tous les nœuds descendants aient été inclus. Voici le code de la fonction :
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
Utilisation de la fonction fetch_recursive
Pour utiliser la fonction, transmettez le tableau de données obtenu à partir de la requête à la fonction fetch_recursive et spécifiez le ID parent dont vous souhaitez récupérer les descendants. Par exemple :
$list = fetch_recursive($data, 3);
Cela renverra un tableau avec la structure suivante, y compris le nœud parent avec l'ID 3 et tous ses descendants :
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!