Einfacher rekursiver Baum in PHP / MySQL
Ich habe diese Tabelle in MySQL:
id name mother
1 grandma 0
2 myuncle 1
3 mymom 1
4 me 3
5 mysister 3
6 myson 4
7 new_grandma_son 1
Ich almacenate diese Informationen in einem Array namensdata[]
$data=array(
array("id"=>1,"name"=>"grandma", "mother"=>0),
array("id"=>2,"name"=>"myuncle", "mother"=>1),
array("id"=>3,"name"=>"mymom", "mother"=>1),
array("id"=>4,"name"=>"me", "mother"=>3),
array("id"=>5,"name"=>"mysister", "mother"=>3),
array("id"=>6,"name"=>"myson", "mother"=>4),
array("id"=>7,"name"=>"new_grandma_son","mother"=>1)
);
Und um einen Stammbaum zu erstellen, benutze ich diese rekursive Funktion:
function tree($data, $mom = 0, $level = 0){
foreach ($data as $row){
if ($row['mother'] == $mom) {
echo str_repeat("-", $level).$row['name']."<br>";
tree($data, $row['id'], $level);
}
else $level++;
}
}
Wenn ich die Funktion aufrufetree($data);
es zeigt dies:
grandma
-myuncle (level 1)
-mymom
----me (level 4??)
---------myson (level 9??)
----mysister
----new_grandma_son (level 4??)
Ich habe den Fehler in derelse $level++;
, weil es Ebenen hinzufügt, wenn$row['mother'] != $mom
Ich gehe alle Zeilen durch, aber ich weiß nicht, wie ich es machen soll. Weiß das jemand? Vielen Dank.
Lösung (von Frits van Campen):
tree($data, $row['id'], $level+1);
// (eliminate this else $level++; )
Vielen Dank!