Собственно, функция разбирает массив. Вот она: PHP: public function treePrint($tree, $pid=0) { if (empty($tree[$pid])) return; echo '<ul>'; foreach ($tree[$pid] as $k => $row) { echo '<li>'; echo $row['name']; if (isset($tree[$row['id']])) $this->treePrint($tree, $row['id']); echo '</li>'; } echo '</ul>'; } Это дело выводит: <ul> <li>1<ul><li>1.1<ul><li>1.1.1</li></ul></li></ul></li> <li>2</li> <li>3<ul><li>3.1</li><li>3.2</li></ul></li></ul> Моя цель — затолкать это в переменную, к примеру, $string. Когда заменяю все echo на $string .= , то не выходит ничего толкового, выбрасывает только <ul> <li>1</li> <li>2</li> <li>3</li></ul> Как мне следует это дело поправить, чтобы все оказывалось в $string'е?
PHP: public function treePrint($tree, $pid=0, &$string = '') { if (empty($tree[$pid])) return; $string .= '<ul>'; foreach ($tree[$pid] as $k => $row) { $string .= '<li>'; $string .= $row['name']; if (isset($tree[$row['id']])) $this->treePrint($tree, $row['id'], $string); $string .= '</li>'; } $string .= '</ul>'; } попробуйте так, только в вызов функции добавьте эту переменную, ну то есть PHP: $string = ''; treePrint(..., ..., $string);
Спасибо, я так и вызывал — результат как раз 1, 2, 3. Не пойму куда выбрасывает ветви. Пробовал ещё разобраться, выводя промежуточное состояние echo $string, но там вобще черт голову сломит, не помогло победить.