如何使用PHP PDO和MySQL对数组中的对象进行分组?
我有这个分类表如何使用PHP PDO和MySQL对数组中的对象进行分组?,php,mysql,pdo,logic,Php,Mysql,Pdo,Logic,我有这个分类表 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:[
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);
我不知道在这种情况下如何处理子类别。或者我做了什么来修复$categories的查询?有什么建议吗?谢谢。要获取根类别,您需要将ref\u id=0的
添加到查询中。然后在foreach
循环中,您需要再次查询以获取当前行的子类别(在第二次查询中使用“where ref_id=“.$row['id']
)。使用另一个foreach
循环编译$subCategories
数组。O、 我将代码中的'id'=>$row['video\u 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"}]}
]}