Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP PDO和MySQL对数组中的对象进行分组?_Php_Mysql_Pdo_Logic - Fatal编程技术网

如何使用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"}]}
]}