Einzelnen Beitrag anzeigen

Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: [PHP] Datensätze als Baum darstellen

  Alt 20. Feb 2008, 15:21
Dann aber zumindest die kopierte Datenmenge redzieren und damit den Schleifendurchlauf verkürzen

Code:
<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"]);
      // eingetragenes Node aus der Datenmenge entfernen
      unset($ds[$key]);
      // 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"]);
      }
    }
  }
}

// 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>
  Mit Zitat antworten Zitat