Сбой функции рекурсии в 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;
Затем я увидел реальную ошибку, с которой столкнулся. Надеюсь, это поможет кому-то!