2016-09-16 88 views
2

我試圖從同一個表中獲取父類別和子類別。我正在使用php rest api。如何使用php mysql獲取嵌套的json對象

這是我的桌子。

id parent category 
-------------------- 
1 | 0 | Fruits 
2 | 0 | Cars 
3 | 1 | Orange 
4 | 1 | Apple 
5 | 0 | Books 
6 | 2 | Benz 
7 | 5 | Comics 
8 | 2 | Honda 
9 | 5 | Fantasy 

我怎麼能得到下面的json php/mysql的查詢。

{ 
    "categories": [{ 
      "id": "1", 
      "category": "Fruits", 
      "subCat": [{ 
       "id": "3", 
       "category": "Orange" 
      }, { 
       "id": "4", 
       "category": "Apple" 
      }] 
     }, { 
      "id": "2", 
      "category": "Cars", 
      "subCat": [{ 
       "id": "6", 
       "category": "Benz" 
      }, { 
       "id": "8", 
       "category": "Honda" 
      }] 

     }, { 
      "id": "5", 
      "category": "Books", 
      "subCat": [{ 
       "id": "7", 
       "category": "Comics" 
      }, { 
       "id": "9", 
       "category": "Fantasy" 
      }] 

     } 

    ] 
} 

感謝您的任何幫助。

回答

2

我覺得這將解決您的問題

function buildTree(array $elements, $parentId = 0) { 
    $branch = array(); 
    foreach($elements as $element) 
     { 
     if ($element['parent'] == $parentId) 
      { 
      $children = buildTree($elements, $element['id']); 
      if ($children) 
       { 
       $element['subCat'] = $children; 
       } 

      $branch[] = $element; 
      } 
     } 

    return $branch; 
    } 

$query1 = mysql_query("select * from table"); 

while ($rlt2 = mysql_fetch_array($query1, MYSQL_ASSOC)) 
    { 
    $child[] = $rlt2; 
    } 

$tree['categories'] = buildTree($child); 
$this->response($this->json($tree) , 200); 
2

約這樣的 - 但它並不完全正確(我在將數組無可救藥,所以我會離開它別人來調整該位)...

<?php 

require('path/to/connection/stateme.nts'); 

$query = " 
SELECT x.id 
    , x.category 
    , y.id sub_id 
    , y.category sub_category 
    FROM my_table x 
    LEFT 
    JOIN my_table y 
    ON y.parent = x.id 
WHERE x.parent IS NULL 
ORDER 
    BY id,sub_id; 
"; 

$result = mysqli_query($db,$query); 

$my_array = array(); 

while($row = mysqli_fetch_assoc($result)){ 
$my_array[] = $row; 
} 

$new_array=array(); 

foreach($my_array as $row){ 
    $new_array[$row['id']][$row['category']][] = $row['id']['category']; 
    }; //this bit needs fixing 

$json = json_encode($new_array); 
?> 
+0

答案是如此的有用,只是希望數組轉換工作 –