2016-09-16 3 views
2

Я пытаюсь получить родительские категории и подкатегории из одной таблицы. Я использую php rest api для того же.Как получить вложенный объект json с php mysql

Это мой стол.

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

Ответ так полезен, просто желайте, чтобы преобразование массива работало –

Смежные вопросы