来自DB fetch的嵌套关联数组

时间:2014-01-15 13:08:00

标签: php multidimensional-array mysqli

我想做以下但未找到如何。

或者我不确定是否有更好的方法/练习,如果你能指出我的方式我将会欣赏它。

我的数据库上有2个表

  • 表1:类别
  • 表2:子类别

表2 与主键的 table1 相关联。

因此,对于 table1 中的1行,我可以在 table2 上有多个关联的行。

我查询并获取 Table1 上的数据,如下所示:

$result = $mysqli->query("SELECT * FROM table1");

$post = array();
    while ($row = $result->fetch_object()){
        $row->sub = get_subcategories($row['id']); /* this value is added to the array since i want to store in here the associated arrays from the table2 */
        $post[] = $row;
    }
return $post;

然后我根据table1中的每个id对table2数据的另一个函数执行以下查询

function get_subcategories($id){
   $result = $mysqli->query("SELECT * FROM table2 where categories_id = '$id'");

   $post = array();
    while ($row = $result->fetch_object()){
        $post[] = $row;
    }
return $post;
}

但是使用var_dump时得到的结果似乎不正确。

我能做到吗?或者我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:1)

使用单个JOIN查询:

$result = $mysqli->query("SELECT * FROM table1 t1 JOIN table2 t2 ON t2.categories_id = t1.id ORDER BY t1.id"); 
$posts = array();
while ($row = $result->fetch_object) {
    if (!isset($posts[$row->categories_id])) {
        $posts[$row->categories_id] = $row;
        $posts[$row->categories_id]->sub = array();
    }
    $posts[$row->categories_id]->sub[] = $row;
}

这将创建嵌套数组。第一级是关联数组,其键是类别ID,值是对象。对象将具有sub属性,该属性是所有子类别的数组。类别和子类别都是fetch_object返回的对象,因此会有重复。但是,您可以引用特定级别的相应对象属性。