Obtenir tous les nœuds enfants, petits-enfants, etc. sous le parent en utilisant PHP avec les résultats de requête MySQL
Problème d'origine :
Récupérer tous les nœuds enfants, petits-enfants et descendants suivants associés à un nœud parent est une tâche courante lorsque vous travaillez avec des structures de données hiérarchiques. Ce problème survient dans les scénarios où les tables de base de données utilisent un modèle de liste de contiguïté pour l'organisation des données.
Approche utilisant la récursion :
Pour résoudre ce problème, la récursivité s'avère être une solution efficace. approche. Voici une explication détaillée de la façon dont la récursivité peut être utilisée pour atteindre cet objectif :
1. Établir une fonction de base :
Une fonction récursive est une fonction qui fait appel à elle-même pour résoudre un problème et est souvent utilisée dans des scénarios impliquant des structures de données hiérarchiques ou imbriquées. Dans ce cas, notre fonction de base sera nommée fetch_recursive.
2. Identification des critères pour les appels récursifs :
Dans fetch_recursive, deux conditions principales déterminent le moment où les appels récursifs sont effectués :
3. Construction du tableau de résultats :
Chaque fois qu'un appel récursif est effectué, la fonction remplira un tableau de résultats avec les données pertinentes du nœud actuel. Ce tableau grandira de manière itérative à mesure que les appels récursifs traverseront la structure arborescente.
4. Recherche récursive de nœuds enfants :
Si le nœud actuel a des nœuds enfants (identifiés par l'existence d'une propriété enfants), un autre appel récursif sera effectué pour récupérer ces nœuds enfants. Ce processus se poursuit jusqu'à ce que tous les nœuds enfants du nœud parent soient capturés.
Fonctionnalité supplémentaire :
1. Gestion des petits-enfants et des descendants :
La nature récursive de fetch_recursive garantit qu'il traversera automatiquement la hiérarchie et récupérera non seulement les nœuds enfants, mais également les petits-enfants et les descendants ultérieurs.
2 . Résultats unificateurs :
Une fois tous les appels récursifs terminés, la fonction renvoie un tableau unique et complet contenant tous les nœuds descendants sous le nœud parent spécifié.
Implémentation du code :
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 :
Pour utiliser la fonction fetch_recursive, transmettez simplement le tableau de données d'origine (dans ce cas, $data) et l'ID du nœud à partir duquel vous souhaitez récupérer les descendants. Par exemple, pour récupérer tous les nœuds enfants, petits-enfants et descendants sous le nœud 3 :
$list = fetch_recursive($data, 3);
Cela remplira la variable $list avec un tableau contenant tous les nœuds pertinents.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3