【发布时间】:2012-07-18 15:24:55
【问题描述】:
我正在使用递归函数在树中转换我的菜单。我从数据库中得到的数组是:
array (
[0] => stdClass Object (
[nav_group_id] => 1
[entity_id] => 1
[parent] => 0
[name] => Meter Reading
[link] => # )
[1] => stdClass Object (
[nav_group_id] => 1
[entity_id] => 2
[parent] => 0
[name] => Parameterization
[link] => # )
[2] => stdClass Object (
[nav_group_id] => 1
[entity_id] => 3
[parent] => 0
[name] => View Reports
[link] => # )
[3] => stdClass Object (
[nav_group_id] => 1
[entity_id] => 4
[parent] => 0
[name] => Management & Control
[link] => # )
[4] => stdClass Object (
[nav_group_id] => 1
[entity_id] => 5
[parent] => 1
[name] => Billing Data
[link] => # )
[5] => stdClass Object (
[nav_group_id] => 1
[entity_id] => 6
[parent] => 1
[name] => MDI Billing Data
[link] => # )
我通过将上述数组传递给该函数来调用递归函数:
$this->parseAndPrintTree('0',$navigation_all);
//die(); (issue here)
现在,如果我在此功能后使用die();,它会显示正确的菜单,如果不使用die();,页面将无法加载并出现此错误:
内容编码错误 您尝试查看的页面无法显示,因为它使用了无效或不受支持的压缩形式。”
...并且没有显示输出。这是我的递归函数:
function parseAndPrintTree($root, $tree)
{
$return = array();
if(!is_null($tree) && count($tree) > 0)
{
echo '<ul>';
foreach($tree as $child => $parent)
{
if($parent->parent == $root)
{
unset($tree[$child]);
echo '<li>'.$parent->name;
$this->parseAndPrintTree($parent->entity_id, $tree);
echo '</li>';
}
}
echo '</ul>';
}
}
【问题讨论】:
-
您将
die();放在函数之后的“修复”对于问题所在并没有决定性的意义。也就是说,不能保证你的错误真的来自你的递归函数。 -
@nickb 但我的代码很清楚,请指出其中是否有任何问题。我认为不会发生无限递归
-
@nickb 但我的代码很清楚,请指出其中是否有任何问题。我认为不会发生无限递归...而且我很确定问题出在递归函数,因为如果我不使用它,代码运行良好
-
您是否在配置中打开了压缩? IE。
$config['compress_output'] = TRUE;?如果是,请尝试将其设置为 false。 -
@Bulk 你说的对!!!!!!!!!!我将 $config['compress_output'] 更改为 false 并且全部完成......但我也想压缩我的输出
标签: php codeigniter recursion anonymous-recursion