**将一个平面的二维数组按照指定的字段转换为树状结构**
* * * * *
**代码:**
~~~
function toTree($arr, $key_node_id, $key_parent_id = 'parent_id', $key_childrens = 'children', $treeIndex = false, & $refs = null) {
$refs = array ();
foreach ( $arr as $offset => $row ) {
$arr [$offset] [$key_childrens] = array ();
$refs [$row [$key_node_id]] = & $arr [$offset];
}
$tree = array ();
foreach ( $arr as $offset => $row ) {
$parent_id = $row [$key_parent_id];
if ($parent_id) {
if (! isset ( $refs [$parent_id] )) {
if ($treeIndex) {
$tree [$offset] = & $arr [$offset];
} else {
$tree [] = & $arr [$offset];
}
continue;
}
$parent = & $refs [$parent_id];
if ($treeIndex) {
$parent [$key_childrens] [$offset] = & $arr [$offset];
} else {
$parent [$key_childrens] [] = & $arr [$offset];
}
} else {
if ($treeIndex) {
$tree [$offset] = & $arr [$offset];
} else {
$tree [] = & $arr [$offset];
}
}
}
return $tree;
}
~~~
**调用:**
~~~
$rows = array(
array('id' => 1, 'value' => '1-1', 'parent' => 0),
array('id' => 2, 'value' => '2-1', 'parent' => 0),
array('id' => 3, 'value' => '3-1', 'parent' => 0),
array('id' => 7, 'value' => '2-1-1', 'parent' => 2),
array('id' => 8, 'value' => '2-1-2', 'parent' => 2),
array('id' => 9, 'value' => '3-1-1', 'parent' => 3),
array('id' => 10, 'value' => '3-1-1-1', 'parent' => 9),
);
$tree = Helper_Array::tree($rows, 'id', 'parent', 'nodes');
dump($tree);
//输出结果:
array(
array('id' => 1, ..., 'nodes' => array()),
array('id' => 2, ..., 'nodes' => array(
array(..., 'parent' => 2, 'nodes' => array()),
array(..., 'parent' => 2, 'nodes' => array()),
),
array('id' => 3, ..., 'nodes' => array(
array('id' => 9, ..., 'parent' => 3, 'nodes' => array(
array(..., , 'parent' => 9, 'nodes' => array(),
),
),
)
~~~
- 前言
- 软件流程
- 快速体验
- 需求分析
- 系统设计
- 数据库设计
- 框架搭建
- 前端开发
- HTML
- CSS
- JavaScript
- Jquery
- 服务端开发
- PHP入门
- PHP开发环境搭建
- PHP基础
- PHP字符串String
- PHP数组Array
- PHP时间Date
- PHP面向对象
- PHP函数封装
- PHP类库
- PHP-MYSQL
- 系统测试
- 开发测试
- 单元测试
- 集成测试
- 系统测试
- 部署上线
- 环境部署
- 权限设置
- 网站配置
- 上线运营
- 系统维护
- 前端技术点
- HTML
- HTML5结构
- CSS
- CSS3实现鼠标移动到图片上图片变大
- 微信开发
- 公众号区别
- 微信支付接口
- 扩展:API
- 1.网站QQ登录的实现
- 2.网站微信扫描登录的实现
- 扩展:插件
- H5上传插件
- H5文件上传插件
- 扩展:函数
- 1.数组转数
- 2.移除数组空元素
- 3.返回数组中指定键的值
- 4.数组按照指定字段的值分组
- 5.网页无图片或者图片不存在自动显示默认图
- 6.返回客户端IP地址
- 7.当数据不显示为空的时候显示默认值
- 扩展:类库【面向对象】
- 类的定义和使用
- 扩展:Mysql
- mysql基础
- 扩展:Linux
- Linux常用命令
- Linux创建svn
- ThinkPHP5专栏
- TP5专栏解读
- 教你怎么使用TP5
- 问题解决篇
- 网页直接打开PDF或强制下载以及header和content-type参数详解
- 让PHP去执行svn命令踩过的坑
- 微信开发 支付开发redirect_uri参数错误解决办法
- 全栈开发实例一
- 1.需求分析
- 2.系统设计
- 3.数据库设计
- 4.框架搭建
- 5.模块设计
- 6.前端开发
- 7.这里小编就不更新了,太累人,直接上源码给你们吧
- 结语
- 【新】github和packagist上的资源