Собрать результаты цикла в одну переменную

Тема в разделе "PHP", создана пользователем NetStranger, 31 июл 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. NetStranger

    NetStranger Постоялец

    Регистр.:
    16 сен 2008
    Сообщения:
    124
    Симпатии:
    1
    есть такой цикл
    Код:
    function ShowTree ($parent_id,$id) {
    $CI =& get_instance();
    $CI->load->database();
    $sql = "SELECT * FROM comments WHERE parent = '$parent_id' AND article = '$id' ORDER BY date";
    $result = $CI->db->query($sql);
    
    if ($result->num_rows() > 0) {
                echo '<div style="margin-left:15px;border: 1px solid">';
                foreach ($result->result_array() as $row)
                {
                        $user = $CI->mainmodel->profile($row['nick_id']);
                        echo '<div>'.$user['username']." ".$row['text'].'</div>';
                        ShowTree ($row['id'],$id);
                }
                echo '</div>';
                                }
    }
    ShowTree (0,$id);
    мне нужно чтобы он не через эхо воспроизводился , а для каждого цикла if ($result->num_rows() > 0) результат заносил в переменную $html
    пытался сделать так :
    Код:
    function ShowTree ($parent_id,$id) {
    $CI =& get_instance();
    $CI->load->database();
    $sql = "SELECT * FROM comments WHERE parent = '$parent_id' AND article = '$id' ORDER BY date";
    $result = $CI->db->query($sql);
    
    if ($result->num_rows() > 0) {
        $html .= '<div style="margin-left:15px; border: 1px solid">';
        foreach ($result->result_array() as $row)
            {
            $user = $CI->mainmodel->profile($row['nick_id']);
            $html .= '<div>'.$user['username']." ".$row['text'].'</div>';
            ShowTree ($row['id'],$id);
            }
        $html .= '</div>';
        
    }
    }
    ShowTree (0,$id);
    пишет ошибки или выводит не в том порядке что надо... помогите плиз!

    ps мне это нужно чтобы результат выводился в форме JSON ,так как предыдущий код делает аля
    Код:
     foreach ($data as $val) {
                            
                            $new_arr[$val['id']] =  array($user['username'] ,$val['text'], $val['date'], $user['email'], $user['avatar'], $val['article'], $val['parent']);
                            }
                        echo json_encode(array('art' => $new_arr));
    и никаких проблем, а тут ваще зопа((( помогите плиз
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    в общем ты правильно делаешь. Ошибки пишет потому, что:
    1- Переменная $html не объявлена.
    2- функция вызывает саму себя и не совсем понятно как выводит не в том порядке что надо... если переменная не доступна из вне.
    Попробуй
    PHP:
    $html='';
    function 
    ShowTree ($parent_id,$id) {
     global 
    $html;
    $CI =& get_instance();
    $CI->load->database();
    $sql "SELECT * FROM comments WHERE parent = '$parent_id' AND article = '$id' ORDER BY date";
    $result $CI->db->query($sql);
     
    if (
    $result->num_rows() > 0) {
                
    $html .= '<div style="margin-left:15px;border: 1px solid">';
                foreach (
    $result->result_array() as $row)
                {
                        
    $user $CI->mainmodel->profile($row['nick_id']);
                       
    $html .=  '<div>'.$user['username']." ".$row['text'].'</div>';
                        
    ShowTree ($row['id'],$id);
                }
                
    $html .= '</div>';
     }
    }
    ShowTree (0,$id);
     
  3. NetStranger

    NetStranger Постоялец

    Регистр.:
    16 сен 2008
    Сообщения:
    124
    Симпатии:
    1
    я так потихоньку начинаю допирать где глюки, да я в курсе что HTML не объявлял, и объявлял тоже самое, не в том порядке фигачит, и все потому что функция в цикле самой функции, тут какой то перекрестный цикл я с такими не сталкивался, когда он тупо ECHO делает до все выводиться очень даже структурировано и как мне надо, а когда я начинаю суммировать переменные он переворачивает все с ног на голову ...

    Спасибо за ответ , но с таким раскладом он вообще белый лист выдает без каких либо ошибок... ((
     
  4. kozax89

    kozax89 Постоялец

    Регистр.:
    12 июл 2009
    Сообщения:
    135
    Симпатии:
    4
    Попробуй

    PHP:
    $html1='';
    $html2='';
    $html3='';

    function 
    ShowTree ($parent_id,$id) {
     global 
    $html1;
     global 
    $html2;
     global 
    $html3;
    $CI =& get_instance();
    $CI->load->database();
    $sql "SELECT * FROM comments WHERE parent = '$parent_id' AND article = '$id' ORDER BY date";
    $result $CI->db->query($sql);
     
    if (
    $result->num_rows() > 0) {
                
    $html1 .= '<div style="margin-left:15px;border: 1px solid">';
                foreach (
    $result->result_array() as $row)
                {
                        
    $user $CI->mainmodel->profile($row['nick_id']);
                       
    $html2 .=  '<div>'.$user['username']." ".$row['text'].'</div>';
                        
    ShowTree ($row['id'],$id);
                }
                
    $html3 .= '</div>';
     }
    }
    ShowTree (0,$id);
    PS.
    Не должно быть вместо
    PHP:
     $html1 .= '<div style="margin-left:15px;border: 1px 
    следущее:
    PHP:
     $html1 '<div style="margin-left:15px;border: 1px 
    ('$html1 = ' без точки??)
     
Статус темы:
Закрыта.