我正在学习如何构建父/子类别列表。我找到了一个很棒的教程并实现了以下代码:
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>';
}
}
我无法理解的是PHP如何处理foreach和递归函数。
这似乎会导致多个“实例??”函数和foreach循环同时运行......这是正确的吗?
如果发生了这种情况,那么随着我的名单增长和儿童关系变得更深,这似乎会变慢。这是真的吗?
答案 0 :(得分:2)
简短的版本是该功能以这种方式工作:
Begin-function (first instance):
Begin-loop:
Loop...
Begin-func-again?
Begin-function (second instance):
Begin-loop:
Loop...
Begin-func-again?
Begin-function (third instance):
Begin-loop:
Loop...
Begin-func-again? (NO)
// termination point reached
End-loop
End-function (third instance)
End-loop (from second instance)
End-function (second instance)
End-loop (from first instance)
End-function(first instance)
并不是同时创建多个版本的函数,它们是按顺序完成的扩展和收缩,但它们都源于原始函数调用。