【发布时间】:2013-11-29 13:03:17
【问题描述】:
我在 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']."<br>";
tree($data, $row['id'], $level);
}
else $level++;
}
}
当我调用函数tree($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++; )
谢谢!
【问题讨论】:
标签: php mysql recursion tree family-tree