php将一个包含父子关系的扁平化数组转换成树形菜单
发表于:2023-05-18 12:31:49浏览:2292次
以下是将一个包含父子关系的扁平化数组转换成树形菜单的PHP递归函数示例:
function generateTree($flatArray, $parentId = null) {
$tree = [];
foreach ($flatArray as $item) {
if ($item['parent_id'] === $parentId) {
$node = [
'id' => $item['id'],
'name' => $item['name'],
'children' => generateTree($flatArray, $item['id'])
];
$tree[] = $node;
}
}
return $tree;
}
该函数接受一个包含父子关系的扁平化数组和可选的parentId参数作为输入。它会遍历数组并找到所有具有指定父ID的节点,将它们转换为对象,并在children属性中递归调用它自己以获取每个节点的子节点。最终,它将返回一个树形菜单对象数组。
例如,假设我们有以下扁平化数组:
$flatArray = [
['id' => 1, 'parent_id' => null, 'name' => 'Home'],
['id' => 2, 'parent_id' => 1, 'name' => 'About'],
['id' => 3, 'parent_id' => 1, 'name' => 'Contact'],
['id' => 4, 'parent_id' => 2, 'name' => 'History'],
['id' => 5, 'parent_id' => 2, 'name' => 'Team'],
['id' => 6, 'parent_id' => 3, 'name' => 'Support'],
['id' => 7, 'parent_id' => 3, 'name' => 'Sales']
];
我们可以调用generateTree($flatArray,0)以获取以下树形菜单对象数组:
[
[
'id' => 1,
'name' => 'Home',
'children' => [
[
'id' => 2,
'name' => 'About',
'children' => [
['id' => 4, 'name' => 'History', 'children' => []],
['id' => 5, 'name' => 'Team', 'children' => []]
]
],
[
'id' => 3,
'name' => 'Contact',
'children' => [
['id' => 6, 'name' => 'Support', 'children' => []],
['id' => 7, 'name' => 'Sales', 'children' => []]
]
]
]
]
]
推荐文章
- 微软推出VS Code PowerShell的重大更新 PowerShell 引擎的彻底改造
- ThinkPHP6的伪静态规则整理(apache、nginx 、IIS)
- PHP8出来也已经有一段时间了 说说PHP8的新特性
- ThinkPHP 6.1.2 版本发布,兼容 PHP8.2以及对ThinkORM3.0 版本的支持
- Vue history模式下实现微信授权登录
- 国产PHP框架,ThinkPHP 8.1版本发布,新版功能盘点
- 微信推出输入法,打个字竟然需要508MB内存?说好的小而美呐?
- 前端开发者必须掌握的数据可视化技术
- GitHub 开源了多款字体,支持自定义字重、宽度和倾斜度
- Vue 3.2 刚刚发布!新的单文件组件,响应式性能大幅提升

