Wie erstellen Sie ein mehrdimensionales Array von hierarchisch gespeicherten SQL-Daten der Adjazenzliste Methode?

StackOverflow https://stackoverflow.com/questions/1273972

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top