2017-06-21 12 views
0

phpとcodeigniterのラムワーク環境でカテゴリツリー構造を作成する際に問題があります。php codeigniterのツリーデータのアルゴリズム

これでデータの構造が必要になりました。

データ例:

public function setCategoryTree($categoryUp = null) 
    { 
    $param = array(); 

    $query = ' SELECT id, name, categoryUp 
       FROM categoryTable 
        WHERE categoryUp = ? '; 


    return $this->commerce_db->query($query)->result(); 
    } 

私がしようとしているコントローラを:

{ 
    "category": [ 
     { 
      "id"  : "1", 
      "text" : "test1" 
      "children": false, 
     }, { 
      "id"  : "2", 
      "text" : "test2", 
      "children": [ 
       { 
        "children": false, 
        "id"  : "3", 
        "text" : "test3" 
       }, { 
        "children": false, 
        "id"  : "4", 
        "text" : "test4" 
       }, { 
        "children": false, 
        "id"  : "5", 
        "text" : "test5" 
       }, { 
        "children": false, 
        "id"  : "6", 
        "text" : "test7" 
       } 
      ] 
     } 
    ] 
} 

私はトラブル各JSONオブジェクトの子の配列

私がしようとしているクエリを作成を抱えています〜へ:

public function getCategoryTree(){ 
    $this->load->model('category_m'); 
    $result = $this->category_m->setCategoryTree(); 
    $resultData = array(); 

    foreach($result as $value) { 
     $treeTmpData = array(); 
     $treeTmpData['id'] = $value->id; 
     $treeTmpData['text'] = $value->text; 
     $treeTmpData['children'] = ????  
     $resultData[] = $treeTmpData; 
    } 

    echo json_encode($resultData, JSON_UNESCAPED_UNICODE); 

    } 

私に幸運

+0

categoryTableの構造を指定してください。 –

答えて

0

あなたの目的のためにこのコードを使用することができます。私はchildernを取得するために再帰を使用します。

テーブルの構造は次のとおりです。

CREATE TABLE `categorytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) DEFAULT NULL, 
    `parent_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
); 

モデル法は、以下のとおりです。

public function setCategoryTree() { 
     $categories = array(); 
     $query = $this->db->query('SELECT id, name as text, parent_id as children FROM categoryTable WHERE parent_id IS NULL'); 
     foreach ($query->result() as $row) { 
      $child = $this->getChilderen($row->id); 
      if (count($child) > 0) { 
       $row->children = $child; 
      } else { 
       $row->children = false; 
      } 
      $categories[] = $row; 
     } 
     return $categories; 
    } 

    private function getChilderen($parentId) { 
     $child = array(); 
     $query = $this->db->query('SELECT id, name as text, parent_id as children FROM categoryTable WHERE parent_id = ' . $parentId); 
     if (count($query->result()) > 0) { 
      foreach ($query->result() as $i => $row) { 
       if ($row->children > 0) { 
        $row->children = $this->getChilderen($row->id); 
       } 
       $child[$i] = $row; 
      } 
      return $child; 
     } else { 
      return false; 
     } 
    } 

コントローラーコード:

public function getCategoryTree(){ 
    $this->load->model('category_m'); 
    $resultData = $this->category_m->setCategoryTree(); 
    echo json_encode($resultData, JSON_UNESCAPED_UNICODE); 
} 

希望、お手伝いをします。あなたがどこかについていたら教えてください。

関連する問題