Comment créer un tableau multidimensionnel à partir de données SQL stockées hiérarchiquement en utilisant la méthode de la liste de contiguïté?
-
16-09-2019 - |
Question
Données hiérarchique de SQL
Liste contiguïté Modèle
Dans mon modèle, j'ai une série d'objets, chacun stockés avec leur ID parent. J'utilise le modèle de liste contiguïté comme ma méthode de hiérarchie.
Tous les exemples de liste contiguïté simplement là-bas et puis sortie. Aucun essayer de créer un tableau à plusieurs dimensions à partir du jeu de résultats.
---------------
| id | parent |
---------------
| 1 | NULL |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 5 |
---------------
Objet
J'ai créé une variable tableau dans ma classe appelée « enfants » et que vous souhaitez ajouter un objet enfant chaque fois que je trouve un enfant de la requête db.
Création d'un tableau à l'intérieur de chaque objet et le stockage des objets suivants y sent mal. je ne peux pas créer le tableau d'objets séparément? En procédant ainsi, peut le rendre difficile à traverser le tableau quand je reçois dans la vue.
Je sens que je suis, j'aborde ce problème dans le mauvais sens?
Y at-il un moyen plus intelligent d'utiliser des tableaux PHP que cela?
La solution
Le tableau d'enfants ne doit pas faire partie d'une classe; vous pouvez toujours faire un arbre ad hoc où un nœud est un hachage contenant un objet et ses enfants. Je ne sais pas PHP, mais il devrait ressembler à:
{
object => $row1,
children => [
{
object => $row2,
children => [ ... ],
}, {
object => $row3,
children => [],
}
]
}
Autres conseils
Avez-vous besoin d'être un tableau? Une option pourrait être d'avoir les objets à mettre en œuvre une structure hiérarchique récursive comme celui-ci:
http://www.php.net/~helly /php/ext/spl/classRecursiveArrayIterator.html
Vous pouvez ajouter les objets que l'enfant et voyager encore la structure d'une manière semblable à un tableau.
La documentation sur SPL est rare, mais il fournit quelques bonnes structures franchissables, les interfaces et les classes. Quelques bons tutoriels existent sur le web à ce sujet.