繁体   English   中英

如何从 PHP 中的数组构建树结构

[英]How to build tree structure from array in PHP

我有下表:

$arr = array(
  array('id'=>100, 'year'=>2019, 'month'=>9, 'name'=>'a'),
  array('id'=>101, 'year'=>2019, 'month'=>12, 'name'=>'b'),
  array('id'=>102, 'year'=>2020, 'month'=>1, 'name'=>'c'),
  array('id'=>103, 'year'=>2020, 'month'=>2, 'name'=>'d'),
);

使用下面的代码

$tree = array();
foreach ($arr as $row) {
    $tree[$row['year']] = array(
        $row['month'] => array (
            'id' => $row['id'],
            'name' => $row['name'],
        ),
    );
}

我想得到以下结果 - 这个结构是一棵树:

Array
(
    [2019] => Array
        (
            [9] => Array
                (
                    [id] => 100
                    [name] => a
                )
            [12] => Array
                (
                    [id] => 101
                    [name] => b
                )
        )

    [2020] => Array
        (
            [1] => Array
                (
                    [id] => 102
                    [name] => c
                )
            [2] => Array
                (
                   [id] => 103
                   [name] => d
                )
        )
)

不幸的是,我只得到一个带有单个“分支”的关注:

Array
(
    [2019] => Array
        (
            [12] => Array
                (
                    [id] => 101
                    [name] => b
                )
        )

    [2020] => Array
        (
            [2] => Array
                (
                   [id] => 103
                   [name] => d
                )
        )
)

这里缺少什么? 为什么前面的行从结构中消失了?

由于您希望年份和月份作为主要索引,因此在将数据添加到$tree时需要同时使用这两个索引...

$tree = array();
foreach ($arr as $row) {
    $tree[$row['year']][$row['month']] = [   'id' => $row['id'],
            'name' => $row['name']];
}

使用您的测试数据,这给出了...

Array
(
    [2019] => Array
        (
            [9] => Array
                (
                    [id] => 100
                    [name] => a
                )

            [12] => Array
                (
                    [id] => 101
                    [name] => b
                )

        )

    [2020] => Array
        (
            [1] => Array
                (
                    [id] => 102
                    [name] => c
                )

            [2] => Array
                (
                    [id] => 103
                    [name] => d
                )

        )

)

您的密钥名称有误 - bl_year, bl_month不存在:

foreach ($arr as $row) {
    $tree[$row['year']] = array(
        $row['month'] => array (
            'id' => $row['id'],
            'name' => $row['name'],
        ),
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM