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 相关文章推荐
转换中文日期的PHP程序
Oct 09 PHP
php短域名转换为实际域名函数
Jan 17 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
解析php中die(),exit(),return的区别
Jun 20 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
php文件上传的两种实现方法
Apr 04 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
7个JS基础知识总结
2014/03/05 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
微信小程序 slider的简单实例
2017/04/19 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
vue使用element-ui实现表单验证
2020/12/13 Vue.js
javascript实现点击产生随机图形
2021/01/25 Javascript
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
如何通过python计算圆周率PI
2020/11/11 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
银河香水:Galaxy Perfume
2019/03/25 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
会计学应届毕业生推荐信
2013/11/04 职场文书
大学新生军训方案
2014/05/03 职场文书
运动会1000米加油稿
2015/07/21 职场文书
小学教代会开幕词
2016/03/04 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python