如何在没有break递归循环的情况下返回html

时间:2016-09-22 19:51:33

标签: php foreach

  

如何连接所有的html并告诉php在最后发送html   递归循环?

我有递归循环来从表构建树作为(父子)节点。

函数运行良好,但我想返回完整的html而不是打印它,所以我使用return,它打破了foreach循环。

 function show_full_tree($ne_id)
    {
        $store_all_id = array();
        $id_result = $this->comment_model->tree_all($ne_id);
        foreach ($id_result as $comment_id) {
            array_push($store_all_id, $comment_id['parent_id']);
        }

        //echo $this->db->last_query();exit;
         $this->in_parent(0,$ne_id, $store_all_id);
    }

    function in_parent($in_parent,$ne_id,$store_all_id) {

    if (in_array($in_parent,$store_all_id)) {
        $result = $this->comment_model->tree_by_parent($ne_id,$in_parent);
        echo  $in_parent == 0 ? "<ul class='tree'>" : "<ul>";
        foreach ($result as $re) {
            echo " <li class='comment_box'>
                <div class='aut'>".$re['comment_id']."</div>
                <div class='aut'>".$re['comment_email']."</div>
                <div class='comment-body'>".$re['comment_body']."</div>
                <div class='timestamp'>".date("F j, Y", $re['comment_created'])."</div>
            <a  href='#comment_form' class='reply' id='" . $re['comment_id'] . "'>Replay </a>";
             $this->in_parent($re['comment_id'],$ne_id, $store_all_id);
            echo "</li>";
        }
        echo  "</ul>";
    }

}

2 个答案:

答案 0 :(得分:2)

您可以使用连接来构建HTML字符串并像其他人建议的那样将其返回,或者 替代方法 将在现有解决方案上使用输出缓冲:< / p>

function get_full_tree($ne_id) {
    ob_start();
    show_full_tree($ne_id);
    return ob_get_clean();
}

答案 1 :(得分:2)

只需制作一个string变量,连接您打印的所有项目,并在loop完成后返回。使用。=运算符,这是将新字符串添加到html变量末尾的简写。

function in_parent($in_parent,$ne_id,$store_all_id) {

    $html = "";

    if (in_array($in_parent,$store_all_id)) {
        $result = $this->comment_model->tree_by_parent($ne_id,$in_parent);
        $html .=  $in_parent == 0 ? "<ul class='tree'>" : "<ul>";
        foreach ($result as $re) {
            $html .= " <li class='comment_box'>
            <div class='aut'>".$re['comment_id']."</div>
            <div class='aut'>".$re['comment_email']."</div>
            <div class='comment-body'>".$re['comment_body']."</div>
            <div class='timestamp'>".date("F j, Y", $re['comment_created'])."</div>
            <a  href='#comment_form' class='reply' id='" . $re['comment_id'] . "'>Replay </a>";
            $html .=$this->in_parent($re['comment_id'],$ne_id, $store_all_id);
            $html .= "</li>";
        }
        $html .=  "</ul>";
    }

    return $html;
}