2016-07-27 7 views
2

スレッドデータのようにしたいので、データがツリービューで表示されますが、問題があります。データが正しく表示されません。いくつかの提案?Codeigniterを使用して再帰的なデータで階層親のcildrenを作成する方法

ここに私のテーブル

+-------------+--------------------+----------------------------------+ 
| division_id | division_parent_id | division_name     | 
+-------------+--------------------+----------------------------------+ 
| 1   | 0     | division one      | 
+-------------+--------------------+----------------------------------+ 
| 2   | 1     | division one child one   | 
+-------------+--------------------+----------------------------------+ 
| 3   | 1     | division one child two   | 
+-------------+--------------------+----------------------------------+ 
| 4   | 2     | division grandchild one-one  | 
+-------------+--------------------+----------------------------------+ 
| 5   | 2     | division grandchild one-two  | 
+-------------+--------------------+----------------------------------+ 
| 6   | 3     | division grandchild two-one  | 
+-------------+--------------------+----------------------------------+ 
| 7   | 3     | division grandchild two-two  | 
+-------------+--------------------+----------------------------------+ 
| 8   | 4     | division greatgradchild one-one | 
+-------------+--------------------+----------------------------------+ 
| 9   | 4     | division greatgrandchild one-two | 
+-------------+--------------------+----------------------------------+ 

と私のコード

function getThreaded($row){ 

     $result = "<ul>"; 
     $result .= "<li>".$row['division_name']."</li>"; 

     $q = $this->db->get_where('tb_m_division', array('division_parent_id' => $row['division_id'])); 

     if($q->num_rows() > 0) 
     { 

      foreach($q->result_array() as $row) 
      { 
       $result .= $this->getThreaded($row); 
      } 


     } 

     $result .="</ul>"; 

     return $result; 


    } 

    function prepare(){ 


     $q = $this->db->get_where('tb_m_division', array('division_parent_id' => '0')); 

     foreach($q->result_array() as $row) 
     { 
      $result = $this->getThreaded($row); 
     } 

     // $this->load->view('header'); 
     // $this->load->view('v_tree', $data); 
     // $this->load->view('footer'); 


     echo $result; 


    } 

データのみを、私は、新しいデータを追加した場合、別のデータが表示されない、inputed最後を表示します。

答えて

0

再帰関数が必要です。ような何か:

function getDivisions($parent_id = 0) 
{ 
    $result = ''; 
    $this->db->where('division_parent_id', $parent_id); 
    $query = $this->db->get('tb_m_division', 0); 
    if ($query->num_rows() > 0) 
    { 
     $rows = $result_array(); 

     $result = "<ul>"; 

     foreach($rows as $row) 
     { 
       $result .= "<li>".$row['division_name']."</li>"; 

       // get children 
       $result .= $this->getDivision($row['division_id']); 

      $result .= "</ul>"; 
     } 
    } 
    return $result; 
} 

は私がそのコードをテストしていませんが、それはバグだらけかもしれませんが、アイデアは、関数は、各行の子供を取得するために自分自身を呼び出すことです。

ポール

あなたは子供に異なるクラスを取得する必要がある場合はPSはあまりにも機能に至るレベルカウンタを送信するので、= 1のレベルがトップレベルであり、

を役に立てば幸い、レベル= 2子供の場合、レベル= 3は孫です。次に、設定されたレベルに応じてli行を変更します。

関連する問題