Сбой функции рекурсии в 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>';
    }
}

2 ответа

Решение

Поскольку я, кажется, на что-то нахожусь, я отправлю это как ответ.

Когда у вас включено сжатие gzip, вы не можете ничего выводить в браузер, пока функции сжатия не получат возможность вывода, что Codeigniter автоматически делает ближе к концу своего стека выполнения. В вашей функции рекурсии у вас есть эхо, которое и делает этот вывод.

Лучший способ исправить это - преобразовать эту функцию во вспомогательную функцию, а затем поместить вызов этой функции в файл представления, а не в контроллер или библиотеку, где, как я полагаю, она находится сейчас.

Ради потомков, я столкнулся с этим сообщением об ошибке, работая над кодом 2.1.0 в Firefox, и попал сюда. Моя проблема заключалась в том, что в моем коде была ошибка или предупреждение, которое было сгенерировано во вложенном представлении. Потому что мой файл /application/config/config.php содержал эту строку

$config['compress_output'] = TRUE;

Я получил то же сообщение об ошибке, что и автор вопроса. Я изменил эту строку

$config['compress_output'] = FALSE;

Затем я увидел реальную ошибку, с которой столкнулся. Надеюсь, это поможет кому-то!

Другие вопросы по тегам