我正在使用递归函数转换树中的菜单。我从数据库中得到的数组是:
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>';
}
}
由于我似乎有什么要做的,我会把它作为答案发布。
当您启用了gzip压缩时,在压缩函数有机会输出之前,您不能向浏览器输出任何内容,Codeigniter会在其执行堆栈接近尾声时自动输出。在递归函数中,您有一个echo,它就是执行此输出的对象。
解决此问题的最佳方法是将此函数转换为辅助函数,然后将对该函数的调用放在视图文件中,而不是控制器或库中,我认为它现在所在的位置。
为了子孙后代的利益,我在Firefox中处理代码2.1.0时遇到了这个错误消息,并在这里着陆。我的问题是我的代码有一个错误或警告,它是在子视图中生成的。因为我的/application/config/config.php文件有这行
$config['compress_output'] = TRUE;
我收到了与问题作者相同的错误信息。我换了那条线
$config['compress_output'] = FALSE;
然后,我看到了我正在处理的实际错误。希望这能帮助到别人!