PHP不用递归实现无限分级的例子分享


Posted in PHP onApril 18, 2014

两个不用递归的树形数组操作函数

/**
 * 创建父节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_parent($ar, $id='id', $pid='pid') { 
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ){
      if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
         $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
    }
  } 
  return $t;
}

/**
 * 创建子节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_child($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ) {
      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
  }
  return $t;
}

使用例子:

$data = array(
  array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
  array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
  array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
  array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
  array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
);
$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');

执行效果:

Array
(
    [1] => Array
        (
            [ID] => 1
            [PARENT] => 0
            [NAME] => 祖父
            [child] => Array
                (
                    [2] => Array
                        (
                            [ID] => 2
                            [PARENT] => 1
                            [NAME] => 父亲
                            [child] => Array
                                (
                                    [4] => Array
                                        (
                                            [ID] => 4
                                            [PARENT] => 2
                                            [NAME] => 自己
                                            [child] => Array
                                                (
                                                    [5] => Array
                                                        (
                                                            [ID] => 5
                                                            [PARENT] => 4
                                                            [NAME] => 儿子
                                                        )                                                )
                                        )
                                )
                        )
                    [3] => Array
                        (
                            [ID] => 3
                            [PARENT] => 1
                            [NAME] => 叔伯
                        )
                )
        )
    [2] => Array
        (
            [ID] => 2
            [PARENT] => 1
            [NAME] => 父亲
            [child] => Array
                (
                    [4] => Array
                        (
                            [ID] => 4
                            [PARENT] => 2
                            [NAME] => 自己
                            [child] => Array
                                (
                                    [5] => Array
                                        (
                                            [ID] => 5
                                            [PARENT] => 4
                                            [NAME] => 儿子
                                        )
                                )
                        )
                )
        )
    [3] => Array
        (
            [ID] => 3
            [PARENT] => 1
            [NAME] => 叔伯
        )
    [4] => Array
        (
            [ID] => 4
            [PARENT] => 2
            [NAME] => 自己
            [child] => Array
                (
                    [5] => Array
                        (
                            [ID] => 5
                            [PARENT] => 4
                            [NAME] => 儿子
                        )
                )
        )
    [5] => Array
        (
            [ID] => 5
            [PARENT] => 4
            [NAME] => 儿子
        )
)
PHP 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
php中对2个数组相加的函数
Jun 24 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
php制作简单模版引擎
Apr 07 PHP
PHP打印输出函数汇总
Aug 28 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
利用php下载xls文件(自己动手写的)
Apr 18 #PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 #PHP
从PHP的源码中深入了解stdClass类
Apr 18 #PHP
理解PHP中的stdClass类
Apr 18 #PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 #PHP
php实现的漂亮分页方法
Apr 17 #PHP
codeigniter中测试通过的分页类示例
Apr 17 #PHP
You might like
计数器详细设计
2006/10/09 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python正则表达式的使用范例详解
2014/08/08 Python
Python字符串中查找子串小技巧
2015/04/10 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
用Python 执行cmd命令
2020/12/18 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
python实现简单的学生管理系统
2021/02/22 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
软件工程专业推荐信
2013/10/28 职场文书
2014年统战工作总结
2014/12/09 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python