我在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
我在名为data []的数组中整理了此信息
$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)
);
为了创建家谱,我正在使用此递归函数:
function tree($data, $mom = 0, $level = 0){
foreach ($data as $row){
if ($row['mother'] == $mom) {
echo str_repeat("-", $level).$row['name']."
";
tree($data, $row['id'], $level);
}
else $level++;
}
}
当我调用函数树($data)时;它显示了这一点:
grandma
-myuncle (level 1)
-mymom
----me (level 4??)
---------myson (level 9??)
----mysister
----new_grandma_son (level 4??)
我在else $level;中有一个错误,因为在$row [‘mother’]!= $mom时,要遍历所有行来添加级别,但是我不知道该怎么做.
有谁知道?谢谢.
解决方案(由Frits van Campen撰写):
tree($data, $row['id'], $level+1);
// (eliminate this else $level++; )
谢谢!
解决方法:
function tree($data,$mom=0,$level=0){
foreach($data as $row){
if($row['mother']==$mom){
echo str_repeat("-",$level).$row['name']."
";
tree($data,$row['id'],$level+1);
}
}
}
我认为这可以修复您的代码.可以提供$data以便我进行测试吗?
标签:tree,family-tree,mysql,php,recursion
来源: https://codeday.me/bug/20191030/1965594.html