快速而肮脏的方法(请参阅下面的“剧透”块以了解实现):
添加附加变量$recursionDepth
到你的函数声明中,使其0
默认情况下。
在每个后续递归中,使用以下命令调用您的函数$recursionDepth + 1
.
由于函数变量仅对于函数的相应实例“可见”(作用域),因此您最终将得到当前迭代深度的指示器。
另外,你的函数的第 12 行
$this->buildTree();
在我看来,它似乎不起作用——原因是你没有将变量传递给下一个实例buildTree
.
它可能应该看起来像这样:
$this->buildTree($row[$children_field], $display_field, $children_field, $class, $id)
以下是我对您的代码进行的更改以实现您想要的效果:
function buildTree($tree_array, $display_field, $children_field, $class='', $id='', $recursionDepth = 0, $maxDepth = false)
{
if ($maxDepth && ($recursionDepth == $maxDepth)) return;
echo "<ul>\n";
foreach ($tree_array as $row)
{
echo "<li>\n";
echo $row[$display_field] . "\n";
if (isset($row[$children_field]))
$this->buildTree($row[$children_field], $display_field, $children_field, $class, $id, $recursionDepth + 1, $maxDepth);
echo "</li>\n";
}
echo "</ul>\n";
}