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