Verschachteltes Array aus Nested Sets

Unfassbar! :eek:

Wie lange muss man PHP lernen um sowas hinzukriegen?

Kann mir jemand sagen was das bedeutet?
PHP:
$helper =& $struct;

Wenn ich nach =& bei Google suche kommt kein Treffer. ;)
 
Nachdem ich dachte, das tolle Script von Gumbo bildet einen korrekten Baum ab, bin ich mittlerweile auf Probleme gestoßen deren Ursache ich einfach nicht sehe.
PHP:
$struct = array();
$level = 0;
$helper =& $struct;
foreach($data as $item) {
    if($level < $item['level']) {
        $keys = array_keys($helper);
        $helper =& $helper[$keys[count($keys)-1]]['children'];
    } else if($level > $item['level']) {
        $helper =& $struct;
        for($i=0; $i<$level-1; $i++) {
            $keys = array_keys($helper);
            $helper =& $helper[$keys[count($keys)-1]]['children'];
        }
    }
    $helper[$item['id']] = array(
        'id'       => $item['id'],
        'name'     => $item['name'],
        'children' => array(),
    );
    $level = $item['level'];
}

Diese Daten liefern die Abfrage korrekt zurück:
Code:
Array
(
  [0] => Array
    (
      [id] => 1
      [name] => Root
      [level] => 0
      [children] => 7
    )

  [1] => Array
    (
      [id] => 3
      [name] => Menschen
      [level] => 1
      [children] => 2
    )

  [2] => Array
    (
      [id] => 6
      [name] => Afrikaner
      [level] => 2
      [children] => 1
    )

  [3] => Array
    (
      [id] => 14
      [name] => Ureinwohner
      [level] => 3
      [children] => 0
    )

  [4] => Array
    (
      [id] => 9
      [name] => Pflanzen
      [level] => 1
      [children] => 0
    )

  [5] => Array
    (
      [id] => 10
      [name] => Steine
      [level] => 1
      [children] => 0
    )

)

Der Baum sieht allerdings komischerweise Weise so aus:
Code:
Array
(
  [1] => Array
    (
      [id] => 1
      [name] => Root
      [type] => root
      [level] => 0
      [children] => Array
        (
          [3] => Array
            (
              [id] => 3
              [name] => Menschen
              [type] => content
              [level] => 1
              [children] => Array
                (
                  [6] => Array
                    (
                      [id] => 6
                      [name] => Afrikaner
                      [type] => content
                      [level] => 2
                      [children] => Array
                        (
                          [14] => Array
                            (
                              [id] => 14
                              [name] => Ureinwohner
                              [type] => user
                              [level] => 3
                              [children] => Array
                                (
                                )
                            )
                        )
                    )

                  [9] => Array
                    (
                      [id] => 9
                      [name] => Pflanzen
                      [type] => content
                      [level] => 1
                      [children] => Array
                        (
                        )
                    )

                  [10] => Array
                    (
                      [id] => 10
                      [name] => Steine
                      [type] => content
                      [level] => 1
                      [children] => Array
                        (
                        )
                    )
                )
            )
        )
    )
)

Die letzten beiden Punkte müssten eigentlich unterhalb von Root hängen:
Code:
Root
|
`-- Menschen
|   |
|   `-- Afrikaner
|       |
|       `-- Ureinwohner
|
`-- Pflanzen
|
`-- Steine

Kommt das Script mit dem Sprung von einem Level 3 (Ureinwohner) auf Level 1 (Pflanzen) nicht zurecht,also wenn zwei nachfolgende Knoten mehr als 1 LEvel auseinander sind?

Wo steckt der Fehler in Gumbos Script? :(
 
Sorry fürs Leichengraben,

Bin gerade über Google auf dieses Thema gestoßen und musste folgende abwandlung durchführen damit es ordentlich funktioniert.

Das:
PHP:
        for($i=0; $i<$level-1; $i++) {
            $keys = array_keys($helper);
            $helper =& $helper[$keys[count($keys)-1]]['children'];
        }

Zu:
PHP:
        $i=0;
        while($i<$item['level']) {
            $keys = array_keys($helper);
            $helper =& $helper[$keys[count($keys)-1]]['children'];
            $i++
        }

dann geht es.
 
Zurück