>我有以下两个函数,它们应该返回一个类似树视图的下拉列表。
.PHP:
function getCategories()
{
$src = $this->db->query('SELECT * FROM categories')->fetchAll();
return $this->tree($src, 0, '');
}
function tree($src, $level, $html)
{
$dashes = '';
for($i=0;$i<$level;$i++)
{
$dashes .= '-';
}
foreach($src as $row)
{
if($row['parent'] == $level)
{
$html .= '<option value="'. $row['id'] .'">'. $dashes . $row['name'] .'</option>';
}
}
$html .= $this->tree($src, $level + 1, $html);
return $html;
}
预期的 HTML 结果:
<option value="1">Category1</option>
<option value="2">-Category2</option>
<option value="3">--Category3</option>
<option value="4">-Category4</option>
但它反而导致了无限循环。为什么?
每个递归都必须有一个基本大小写。递归停止的点。
在你无条件地做一个递归调用的那一刻,所以自然而然地,你会得到一个无限递归。