php - 如何在 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
)
)
)
推荐阅读
- python - 从类型提示推断所有策略的假设装饰器
- php - 导入 Excel 并使用 Datatables PHP 预览
- salesforce - hed__Application_Status__c 在 Process Builder 中不可见
- angular - 如何忽略证书验证
- javascript - 是什么让相同数量的循环具有不同的性能?
- javascript - 如何在 Typescript 中定义具有多个重载的通用 getter 方法?
- java - Android如何拒绝已经存在的权限
- java - Swagger - 错误的示例值
- oracle - 为什么 oracle 中的默认索引称为 B-tree 而不是 B+tree?
- python - 如何阻止按钮在kivy中被按下两次