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一些常用的正则表达式字符的一些转换
Jul 29 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
php时间函数用法分析
May 28 PHP
PHP快速推送微信模板消息
Apr 14 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
thinkPHP框架中执行事务的方法示例
May 31 PHP
php实现多站点共用session实现单点登录的方法详解
Sep 18 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
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
初识Node.js
2015/03/20 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
web打印小结
2017/01/11 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
Python导入txt数据到mysql的方法
2015/04/08 Python
python实现求最长回文子串长度
2018/01/22 Python
用Eclipse写python程序
2018/02/10 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
在python3中实现更新界面
2020/02/21 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
大班上学期幼儿评语
2014/04/30 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python