2012-08-17 35 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); 

我在这种情况下,不知道如何处理subCategories。或者我做什么来解决$类别的查询?有什么建议么?谢谢。

+0

的可能重复[如何在一个阵列I组阵列, PHP和编码到JSON?](http://stackoverflow.com/questions/11997109/how-can-i-group-arrays-in-an-array-in-php-and-encode-to-json) – KingCrunch 2012-08-17 08:16:06

回答

2

获取根类别,您需要将where ref_id=0添加到您的查询中。然后在您的foreach循环中,您需要再次查询以获取当前行的子类别(在第二个查询中使用"where ref_id=".$row['id'])。您使用另一个foreach循环编译$subCategories阵列。 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 2012-08-22 12:39:40

相关问题