Noch ne kleine Änderung um die Durchlaufzeit zu optimieren
Code:
// rekursives füllen eines Trees aus einer Datenmenge
// die & vor den variablen sind Zeigerangaben, damit auch
// rauskommt was gewünscht wird
function filltree(&$node, $ds, $id=0) {
// Datenmenge durchgehen (Tree-Root ist 0)
foreach ($ds as $key=>$data) {
// Wenn der parent mit der ID der zu füllenden Node übereinstimmt
// eine Subnode erstellen
if ($data["parent"] == $id) {
// Zuordnung von Nutzdaten zu ID
$node[$data["id"]] = array("text" => $data["text"], "data" => $data["data"]);
// eingetragenes Node aus der Datenmenge entfernen
unset($ds[$key]);
// rekursiv füllen
$ds = filltree($node[$data["id"]]["childs"], $ds, $data["id"]);
// wenn es doch keine Kinder gab, den "childs"-Unterpunkt
// wieder entfernen
if (count($node[$data["id"]]["childs"]) == 0) {
unset($node[$data["id"]]["childs"]);
}
}
}
return $ds;
}