使用php从mysql数据库构建多维数组

使用php从mysql数据库构建多维数组,php,mysql,multidimensional-array,Php,Mysql,Multidimensional Array,我有一个理论上的问题,我似乎想不出来。假设数据库中有以下数据: Main Sub1 Sub2 a x y x t u u f g 我想在PHP/mYSQL中创建一个多维数组,方法是询问“每个‘主’组件由什么组成?” 结果会是这样的: Array ( [0] => a ( [0] => x ( [0] => t [1] =>

我有一个理论上的问题,我似乎想不出来。假设数据库中有以下数据:

Main    Sub1   Sub2
a       x      y
x       t      u
u       f      g
我想在PHP/mYSQL中创建一个多维数组,方法是询问“每个‘主’组件由什么组成?”

结果会是这样的:

Array
   (
   [0] => a
     (
     [0] => x
       (
       [0] => t
       [1] => u
       )
         (
         [0] => f
         [1] => g
         )
     [1] => y
     )
   )

我的努力产生了许多数组,而不是多维数组。

您可以使用引用来解决这个问题,尽管结果会有点混乱:

$res = [];

foreach ($rows as $row) {
    // check if we have each sub component
    if (!isset($res[$row['sub1']])) {
        $res[$row['sub1']] = $row['sub1'];
    }
    if (!isset($res[$row['sub2']])) {
        $res[$row['sub2']] = $row['sub2'];
    }
    // build new component with references to the sub components
    $res[$row['main']] = [&$res[$row['sub1']], &$res[$row['sub2']]];
}

print_r($res);
输出 您可以通过仅过滤出阵列来清理结果:

print_r(array_filter($res, 'is_array'));
输出
您是否介意包含数据库检索语法(例如,
while($row=mysql\u fetch\u assoc($result)){
)这样我就可以理解你的命名约定了?谢谢你的帮助!@user1912319答案对数据库中的行也有同样的作用。我没有将
$行理解为$row
,然后检查
$row
是否已设置。你介意稍微扩展一下吗?@user1912319我已经添加了一些注释,希望能有所帮助。
print_r(array_filter($res, 'is_array'));
Array
(
    [x] => Array
        (
            [0] => t
            [1] => Array
                (
                    [0] => f
                    [1] => g
                )

        )

    [a] => Array
        (
            [0] => Array
                (
                    [0] => t
                    [1] => Array
                        (
                            [0] => f
                            [1] => g
                        )

                )

            [1] => y
        )

    [u] => Array
        (
            [0] => f
            [1] => g
        )

)