2016-09-22 3 views
0

どのようにすべてのhtmlを連結し、PHPには 再帰的ループの最後にhtmlを送信するように指示しますか?ブレーク再帰ループなしで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>"; 
    } 

} 
+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()'はすべてのコンテンツを返します。 –

関連する問題