CodeIgniter中的递归函数失败


Recursion function failed in CodeIgniter

我正在使用递归函数转换树中的菜单。我从数据库中得到的数组是:

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;

然后,我看到了我正在处理的实际错误。希望这能帮助到别人!