为什么我在这个父子递归中陷入无限循环


Why am I getting in an infinite loop with this parent-child recursion?

>我有以下两个函数,它们应该返回一个类似树视图的下拉列表。

.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>

但它反而导致了无限循环。为什么?

每个递归都必须有一个基本大小写。递归停止的点。

在你无条件地做一个递归调用的那一刻,所以自然而然地,你会得到一个无限递归。