<
html>
<head>
<title>DataSet 2 Tree - Test</title>
<style>
.code {
margin-bottom: 10px;
margin-top: 0;
border: 1px solid black;
}
</style>
</head>
<body><?php
// Test-Datenmenge
$dataset = array(
array("id"=>1, "parent"=>0, "text"=>"Test1", "data"=>"Data1"),
array("id"=>2, "parent"=>0, "text"=>"Test2", "data"=>"Data2"),
array("id"=>3, "parent"=>1, "text"=>"Test3", "data"=>"Data3"),
array("id"=>4, "parent"=>2, "text"=>"Test4", "data"=>"Data4"),
array("id"=>5, "parent"=>1, "text"=>"Test5", "data"=>"Data5"),
array("id"=>6, "parent"=>1, "text"=>"Test6", "data"=>"Data6"),
array("id"=>7, "parent"=>4, "text"=>"Test7", "data"=>"Data7"),
array("id"=>8, "parent"=>4, "text"=>"Test8", "data"=>"Data8"),
array("id"=>9, "parent"=>3, "text"=>"Test9", "data"=>"Data9")
);
// 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"]);
// rekursiv füllen
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"]);
}
// eingetragenes Node aus der Datenmenge entfernen
unset($ds[$key]);
}
}
}
// das eigentliche befüllen $tree wird dabei gleich mit definiert
filltree($tree, $dataset);
// Debug Ausgabe
echo "[b]print_r(\$tree):[/b]<pre class='code'>".print_r($tree, true)."</pre>";
?></body>
</
html>