2016-09-22 29 views
0

如何连接所有html并告诉php在 递归循环的末尾发送html?如何在不中断递归循环的情况下返回html

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

函数运行良好,但我想返回完整的html不打印它,所以我使用返回,这打破了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>"; 
    } 

} 
+1

'如何连接所有html' - 使用'.' –

回答

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; 
} 
+0

不是它返回第一个父注释并忽略了子节点 – user1080247

+0

请将concat变量添加到此行以更正您的答案$ html。= $ this-> in_parent($ re ['comment_id'],$ ne_id,$ store_all_id) ; – user1080247

2

您可以使用连接来建立HTML字符串并返回它,就像其他人则建议,或替代方法将在现有解决方案中使用输出缓冲:

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

其实@ZoliSzabo是正确的。 'ob_start()'保持回声而不显示它,然后'ob_get_clean()'返回所有的内容。 –

相关问题