Cet article vous guidera à travers une méthode pour récupérer tous les nœuds enfants et descendants pour un parent spécifié utilisant PHP avec les résultats de requête MySQL. Cette technique élimine le besoin de construire un tableau multidimensionnel de la structure arborescente et vous permet d'obtenir tous les nœuds directement.
Considérez une table MySQL organisée comme une liste de contiguïté, où les données hiérarchiques sont représentées par des colonnes pour l'identifiant, le nom. et parent_id. La requête SQL suivante peut récupérer toutes les lignes de cette table dans un tableau associatif :
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
Supposons que nous souhaitions filtrer ce tableau pour les nœuds sous un parent avec l'identifiant 3, y compris le parent lui-même. Cette fonction fetch_recursive personnalisée peut accomplir ceci :
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; }
Pour utiliser cette fonction, transmettez le tableau $data obtenu à partir de la requête comme premier argument et l'identifiant du parent pour lequel vous souhaitez récupérer les nœuds enfants comme le deuxième argument :
$list = fetch_recursive($data, 3);
$list contiendra désormais un tableau associatif avec tous les nœuds enfants et le nœud parent (id 3) inclus.
Cette solution récupère efficacement tous les nœuds enfants et descendants pour un parent spécifié sans avoir besoin de construction d'une structure arborescente multidimensionnelle.
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!