J'ai une fonction qui obtient les identifiants de tous les enfants d'un parent de ma base de données. Donc, si je cherchais l'id 7, il pourrait retourner un tableau avec 5, 6 et 10. Ce que je veux faire, c'est trouver récursivement les enfants de ces ids retournés, et ainsi de suite, à la profondeur finale des enfants.PHP: Obtenir récursivement les enfants du parent
J'ai essayé d'écrire une fonction pour ce faire, mais je suis confus au sujet de la récursivité.
function getChildren($parent_id) {
$tree = Array();
$tree_string;
if (!empty($parent_id)) {
// getOneLevel() returns a one-dimentional array of child ids
$tree = $this->getOneLevel($parent_id);
foreach ($tree as $key => $val) {
$ids = $this->getChildren($val);
array_push($tree, $ids);
//$tree[] = $this->getChildren($val);
$tree_string .= implode(',', $tree);
}
return $tree_string;
} else {
return $tree;
}
}//end getChildren()
Une fois la fonction est exécutée, je voudrais revenir à un tableau à une dimentionnelle de tous les enfants ids qui ont été trouvés.
Avec le modèle de liste d'adjacence, est-il facile de mettre à jour/déplacer le parent? –
Non, il faut pas mal de requêtes pour mettre à jour les tables ALM. Environ6 ~ en fonction de la façon dont vous pouvez optimiser vos requêtes. Les avantages sont tous faits lorsque vous sélectionnez. Alors plutôt que de faire 4 requêtes en sélectionnant la profondeur, les enfants, les parents etc, vous pouvez le faire juste une requête. Donc, si vous sélectionnez plus que vous insérez et mettez à jour, vous devez utiliser ALM imho. – Layke
N'est-ce pas l'inverse? Avec les ensembles imbriqués, il est facile de récupérer l'arbre complet (ou n'importe quel sous-ensemble de l'arbre), en sélectionnant et en triant les valeurs de gauche associées à chaque noeud. Reportez-vous à http://dev.mysql.com/tech-resources/articles/hierarchical-data.html pour plus d'informations (spécifique à MySQL, mais devrait être facilement portable vers un autre SGBDR si nécessaire). – wimvds