【发布时间】:2013-03-09 23:54:35
【问题描述】:
我正在学习如何构建父/子类别列表。我找到了一个很棒的教程并实现了以下代码:
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 循环同时运行...对吗?
如果这是正在发生的事情,那么随着我的列表增长和孩子关系的加深,这似乎可能会放缓。这是真的吗?
【问题讨论】:
-
对于树元素的循环和/或打印,最好的方法是递归,递归是编程中接受的方法。
-
忘记函数的“实例”吧,没有这样的东西。当你调用一个函数时,函数中列出的步骤将被执行。这可以递归地发生,当指示这样做时执行这些步骤。发生在已经执行的非常相似的步骤(相同的功能)的中间并不重要。
标签: php memory tree recursive-datastructures