PHP无限级树形结构算法(递归和引用)
2024-10-06 07:16:52
测试数组
$array = [
['id' => , 'pid' => , 'name' => '这是主类'],
['id' => , 'pid' => , 'name' => '这是主类'],
['id' => , 'pid' => , 'name' => '父级为1子类'],
['id' => , 'pid' => , 'name' => '父级为2子类'],
['id' => , 'pid' => , 'name' => '父级为3子类'],
];
一、递归算法
function tree($array, $pid)
{
$tree = array();
foreach ($array as $key => $value) {
if ($value['pid'] == $pid) {
$value['child'] = tree($array, $value['id']);
if (!$value['child']) {
unset($value['child']);
}
$tree[] = $value;
}
}
return $tree;
} echo "<pre>" . print_r(tree($array, ), ) . "</pre>";
二、数组引用
function generateTree($rows, $id = 'id', $pid = 'pid')
{
$items = array();
foreach ($rows as $row) {
$items[$row[$id]] = $row;
}
foreach ($items as $item) {
$items[$item[$pid]]['son'][$item[$id]] = &$items[$item[$id]];
}
return isset($items[]['son']) ? $items[]['son'] : array();
} echo "<pre>" . print_r(generateTree($array), ) . "</pre>";
最新文章
- weiphp踩坑记录
- storyboard连线容易出现的问题
- cocos2d-x 图片性能测试
- 关于js的string的3个函数slice,substring,substr对比
- Java中替换HTML标签的方法代码
- mysql 事件调度器
- powerdesigner jdbc 连接 oracle
- Winedt10 添加自定义宏
- 好的android编码习惯
- 解决spark运行中failed to locate the winutils binary in the hadoop binary path的问题
- Spring 数据库连接(Connection)绑定线程(Thread)的实现
- J2EE进阶(七)利用SSH框架根据数据表建立model类
- SQL server 表信息查询
- iOS XIB使用中适配iPhoneX的安全区域、调用UiView动画
- [Swift]LeetCode234. 回文链表 | Palindrome Linked List
- FCC JS基础算法题(6):Truncate a string(截断字符串)
- 小朋友学C语言(4):单精度浮点数与双精度浮点数
- 【CF662A】Gambling Nim 线性基
- 自定义redis序列化工具
- ABAP-关于隐式与显式的DB Commit
热门文章
- c# 值传递
- RTC — 软件协作开发管理平台
- 【BZOJ2324】[ZJOI2011]营救皮卡丘 给定起点最小权K链可相交覆盖
- DataTable 删除数据后重新加载
- evpp http response_http_code_
- [转]对于BIO/NIO/AIO,你还只停留在烧开水的水平吗
- IntelliJ IDEA lombok插件的安装和使用
- 【xsy1103】随机数表(RanMat)矩阵快速幂
- Django中的日期和时间格式 DateTimeField
- GIL 信号量 event事件 线程queue