За последние 24 часа нас посетили 17966 программистов и 1721 робот. Сейчас ищут 920 программистов ...

сохранение результата рекурсивной функции

Тема в разделе "PHP для новичков", создана пользователем virus-07, 18 июл 2011.

  1. virus-07

    virus-07 Активный пользователь

    С нами с:
    9 май 2011
    Сообщения:
    37
    Симпатии:
    0
    Собственно, функция разбирает массив. Вот она:
    PHP:
    1. public function treePrint($tree, $pid=0) {
    2.     if (empty($tree[$pid]))
    3.         return;
    4.     echo '<ul>';
    5.     foreach ($tree[$pid] as $k => $row) {
    6.         echo '<li>';
    7.         echo $row['name'];
    8.         if (isset($tree[$row['id']]))
    9.             $this->treePrint($tree, $row['id']);
    10.         echo '</li>';
    11.     }
    12.     echo '</ul>';
    13. }
    Это дело выводит:
    <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'е?
     
  2. Easy

    Easy Активный пользователь

    С нами с:
    15 июл 2011
    Сообщения:
    286
    Симпатии:
    0
    PHP:
    1. public function treePrint($tree, $pid=0, &$string = '') {
    2.      if (empty($tree[$pid]))
    3.          return;
    4.      $string .= '<ul>';
    5.      foreach ($tree[$pid] as $k => $row) {
    6.          $string .= '<li>';
    7.          $string .= $row['name'];
    8.          if (isset($tree[$row['id']]))
    9.              $this->treePrint($tree, $row['id'], $string);
    10.          $string .= '</li>';
    11.      }
    12.      $string .= '</ul>';
    13.  }
    попробуйте так, только в вызов функции добавьте эту переменную, ну то есть
    PHP:
    1. $string = '';
    2. treePrint(..., ..., $string);
     
  3. virus-07

    virus-07 Активный пользователь

    С нами с:
    9 май 2011
    Сообщения:
    37
    Симпатии:
    0
    Спасибо, я так и вызывал — результат как раз 1, 2, 3.
    Не пойму куда выбрасывает ветви. Пробовал ещё разобраться, выводя промежуточное состояние echo $string, но там вобще черт голову сломит, не помогло победить.