2012-08-17 2 views
1

У меня этой категории ТаблицаКак сгруппировать объекты в массиве с помощью PHP PDO и MySQL?

Category 
============ 
id name ref_id 
1  cat1 0 
2  cat2 0 
3  subCat1 1 
4  subCat2 1 
5  subCat3 2 
6  subCat4 2 

Я хотел бы иметь результат, который выглядит следующим образом:

{items: [ 
    {catId: 1, subCat:[{name: subCat1}, {name:subCat2}]}, 
    {catId: 2, subCat:[{name: subCat2}, {name:subCat4}]} 
]} 

Я попытался подойти к этому с помощью:

$db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', '', ''); 

$categories = $db -> query('SELECT * FROM category'); 

$results = array('items' => array()); 

foreach($categories as $row) { 
    $subCategories = array(); 
    $results['items'][] = array('id' => $row['video_id'], 'subCat' => $subCategories); 
} 

echo json_encode($results); 

I не имеют понятия, что делать с подкатегориями в этом случае. Или что-нибудь, что я могу сделать, чтобы исправить запрос из $ категорий? Какие-либо предложения? Благодарю.

+0

возможный дубликат [Как можно сгруппировать массивы I в массиве в PHP и кодировать JSON?] (Http://stackoverflow.com/questions/11997109/how-can-i-group-arrays-in-an-array-in-php-and-encode-to-json) – KingCrunch

ответ

2

Получение корневых категорий, вам нужно добавить where ref_id=0 к вашему запросу. А затем в вашем цикле foreach вам нужно запросить еще раз, чтобы получить подкатегории текущей строки (используя во втором запросе "where ref_id=".$row['id']). Вы компилируете массив $subCategories, используя другой цикл foreach. O, и я заменил 'id' => $row['video_id'] с вашего кода на 'catId' => $row['id'], чтобы получить требуемый результат.

Как следует:

<?php 
$db = new PDO('mysql:host=localhost;dbname=test', '', ''); 

$categories = $db->query('SELECT * FROM category where ref_id=0'); 

$results = array('items' => array()); 

foreach($categories as $row) { 
    $subCategories = array(); 

    $sCategories = $db->query('SELECT * FROM category where ref_id='.$row['id']); 
    foreach($sCategories as $subCat){ 
    $subCategories[] = array('name'=>$subCat['name']); 
    } 

    $results['items'][] = array('catId' => $row['id'], 'subCat' => $subCategories); 
} 

echo json_encode($results); 

я воссоздал свою базу данных на моей стороне, и когда я запускаю это, я получаю

{"items":[ 
    {"catId":"1","subCat":[{"name":"subcat1"},{"name":"subcat2"}]}, 
    {"catId":"2","subCat":[{"name":"subcat3"},{"name":"subcat4"}]} 
]} 
+0

+ 1 для воссоздания базы данных для тестирования :) – epoch

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