1
我正在学习如何构建父/子类别列表。我发现了一个伟大的教程,并已实现了以下代码:此代码是否创建该函数的多个实例?
while($row = $tree_sth->fetch()){
$rows[$row['id']] = array('name'=>$row['name'], 'on'=>$row['on'], 'parent'=>$row['parent']);
}
function btree($parent){
$has_childs = false;
global $rows;
foreach ($rows as $key => $value){
if($value['parent'] == $parent){
if ($has_childs === false){
$has_childs = true;
echo '<ul>';
}
echo '<li>'.$value['name'];
btree($key);
echo '</li>';
}
}
if($has_childs === true){
echo'</ul>';
}
}
什么我无法理解的是如何在foreach和递归函数由PHP处理。
看来,这会导致多个“实例??”的函数和foreach循环同时运行...是否正确?
如果这是发生的事情,看起来这可能会减慢,因为我的名单增长和子女关系变得更深。这是真的?
对于循环树元素和/或打印它们,最好的方法是递归,并且递归在编程中是可接受的方法。 – 2013-03-10 00:02:56
忘记一个函数的“实例”,没有这样的事情。当您调用函数时,函数中列出的步骤将被执行。这可以递归地发生,这些步骤在被指示时执行。无关紧要的是,这种情况发生在已经被执行的非常类似的步骤(相同的功能)中。 – deceze 2013-03-10 00:06:27