簡體   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