dtp0760 2016-09-22 19:51
浏览 45
已采纳

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

How to concat all the html and tell php to send html in the end of a recursive loop ?

I have recursive loop to build tree from table as (parent-child) nodes.

Functions work well but I want to return full html not to print it, so I use return, which breaks foreach loop.

 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条回答 默认 最新

  • doumei4964 2016-09-22 22:06
    关注

    Simply make a string variable, concat all the items you would otherwise print and return it after the loop is finished. Used .= operator, which is a shorthand for adding the new string to the end of the html variable.

    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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)