Nested Sets Datensatz in mehrdimensionales Array umwandeln

cobraone

Mitglied
Hallo
folgenden Datensatz erhalte ich von meiner Query:
Code:
+----------+----------+----------+----------+
| name     | children | level    | value    |
+----------+----------+----------+----------+
|    A     |    5     |    1     |          |
|    B     |    2     |    2     |          |
|    C     |    0     |    3     |  wert1   |
|    D     |    0     |    3     |  wert2   |
|    E     |    1     |    2     |          |
|    F     |    0     |    3     |  wert3   |
+----------+----------+----------+----------+
So weit so gut. Daraus möchte ich jetzt einen mehrdimensionalen Array erzeugen.
Code:
$arr["A"]["B"]["C"] = wert1;
$arr["A"]["B"]["D"] = wert2;
$arr["A"]["E"]["F"] = wert3;
In etwa so und das beliebig tief.
Hätte da jemand eine Idee?
 
Also

1. bei mir geht das nie, dass ich die mehrdimensionalen Arrays durch indizes erstelle.
höchstens $array[index][index] = array (...);
um den letzen Index zu erstellen muss man das dann so schreiben.
2. Ganz normal auslesen - In eine while-Schleife und dann so in etwa:
$arr["A"]["B"] = array($i => $row['wert']);
$i kann jetzt auch immer der nächste Buchstabe des Alphabets sein ... Ist dir überlassen.
 
Die while-Schleife habe ich.
Da muss jetzt festgestellt werden ob ["A"] ein Array ist oder nicht. Wenn ja, müsste dasselbe mit ["B"] getestet werden und so weiter...

...wenn es keine child-Knoten mehr hat wird der Wert (value) zugewiesen.

Bis hier kein Problem.

Nur wie reihe ich nun ["A"] und ["B"] zu ["A"]["B"] zusammen.
Und wie weiss ich, dass ["E"] ein child von ["A"] ist? :confused:
 
äh?
Du willst schon $array[][][] haben?
Du kannst doch mit array() ein Array erstellen ... Oder zeig mal her, was du bis jetz gemacht hast ;)
 
Im Moment habe ich es so gelöst (siehe Dateianhang).

Jedoch ist das meiner Meinung nach ein ziemlicher Bastel. :-)

Hier habe ich die Nested Sets Abfrage so verdreht, dass daraus ein langer String wurde den ich dann mit parse_str() zu einem Array umwandelte. Jedoch gehen mir so alle Variablen-Informationen verloren. Ob Integer, Float, String... wird jetzt alles als String im Array stehen.

Hätte hier jemand eine Idee wie ich das ganze "sauber" lösen könnte? Ohne die Var-Infos zu verlieren - vielleicht gibt es dazu sogar eine Funktion oder eine Klasse?
Bei :google: hab ich jeden falls vieles gefunden - nur nicht das! :(
 

Anhänge

Hallo? Weiss hier niemand Rat?
Oder steigt ihr nicht was ich meine?

Ich wäre wirklich froh um jeden Anstoss, das mal noch sauber lösen zu können!

Merci ;)
 
Also, da ich bis jetzt keine Antwort bekommen habe - nochmals von vorn:

Nested Sets liefert mir einen Baum.
Code:
+-------+
|   A   |
+-------+
    |
    |             +-------+
    +-------------|   B   |
    |             +-------+
    |                 |
    |                 |             +-------+
    |                 +-------------|   C   |
    |                 |             +-------+
    |                 |
    |                 |             +-------+
    |                 +-------------|   D   |
    |                               +-------+
    |
    |             +-------+
    +-------------|   E   |
                  +-------+
                      |
                      |             +-------+
                      +-------------|   F   |
                                    +-------+
Wie ich diese Baumstruktur in eine eingerückte Aufzählungsstruktur umwandle finde ich auf diversen Websites.

Nur wie kann ich diese Baumstruktur in ein mehrdimensionales Array umwandeln? :confused:
Code:
$arr["A"] = array();
$arr["A"]["B"] = array();
$arr["A"]["B"]["C"] = wert1;
$arr["A"]["B"]["D"] = wert2;
$arr["A"]["E"] = array();
$arr["A"]["E"]["F"] = wert3;
So sollte das ganze dann in etwa aussehen.

Bitte meldet mir eure Ideen - ich sitze seit 3Tagen an diesem Problem und komme nicht weiter.

Dankeschön!
 
Ja der Baum kommt so aus der Query retour. Leider erst in der Form der Tabelle wie ich sie im ersten Posting gezeigt habe. Jetzt soll diese Rückgabe umgewandelt werden damit ich alles in einem Array habe und so ansprechen kann.

(Genaueres über Nested Sets und deren SELECT-Befehlen findest du unter: http://www.develnet.org/36.html )
 
Hmmm ...
Dein Nested Sets liefert dir eine Tabelle, welche die Daten "Children", "Name" und "Level" beinhaltet?

Frage: Wie weiß ein "Kind", welchem Datensatz es zugeordnet ist, wenn nur level gespeichert ist?
Wenn man 2 Datensätze mit demselben level hat, könnte das "Kind" ja zu jedem Beliebigen Datensatz mit dem Level gehören.

Wenn du mir das sagst, weiß ich evtl. auch, wie man das machen könnte ;)
Will aber nichts versprechen.

PS: Oder hab ich das komplett falsch verstanden?

Edit: Man kann die Tabelle, die du im ersten Posting gepostet hast wie eine normale MySQL-Tabelle benutzen?
 
Zurück