Wie erstellen Sie ein mehrdimensionales Array von hierarchisch gespeicherten SQL-Daten der Adjazenzliste Methode?
-
16-09-2019 - |
Frage
Hierarchical Daten aus SQL
Adjazenzliste Modell
In meinem Modell habe ich eine Reihe von Objekten, die jeweils gespeicherten mit ihren Eltern ID. Ich bin mit dem Adjazenzliste Modell als meine Hierarchie Methode.
Alle Beispiele Adjazenzliste einfach Ausgang dort und dann. Keine versuchen, eine mehrdimensionale Array aus der Ergebnismenge zu erstellen.
---------------
| id | parent |
---------------
| 1 | NULL |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 5 |
---------------
Objekt
Ich habe ein Array-Variable in meiner Klasse ‚Kinder‘ genannt und möge ein Kind hinzufügen jedes Mal Objekt ich ein Kind aus der db-Abfrage finden.
Erstellen eines Arrays innerhalb jedes Objekt und zum Speichern der nachfolgenden Objekte dort falsch anfühlt. Kann ich nicht das Array von Objekten separat erstellen? es auf diese Weise tun, kann es schwierig machen, das Array zu durchlaufen, wenn ich es in die Ansicht zu bekommen.
Ich fühle mich wie ich dieses Problem näherte mich den falschen Weg?
Gibt es einen intelligenten Weg, um PHP-Arrays als diese zu benutzen?
Lösung
Das Array von Kindern muss nicht Teil einer Klasse sein; Sie können immer nur einen Ad-hoc-Baum machen, wo ein Knoten ein Hash ist ein Objekt und seine Kinder enthält. Ich weiß nicht, PHP, aber es wäre in etwa so aussehen:
{
object => $row1,
children => [
{
object => $row2,
children => [ ... ],
}, {
object => $row3,
children => [],
}
]
}
Andere Tipps
Sie benötigen es ein Array zu sein? Eine Option könnte sein, die Objekte haben eine rekursive hierarchische Struktur wie diese implementieren:
http://www.php.net/~helly /php/ext/spl/classRecursiveArrayIterator.html
Sie können die Objekte als Kind hinzufügen und reisen immer noch die Struktur in einem Array artig.
Die Dokumentation auf SPL ist spärlich, aber es gibt einige gute verfahrbaren Strukturen, Schnittstellen und Klassen. Einige gute Tutorials gibt es im Web über sie.