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 相关文章推荐
一个简易需要注册的留言版程序
Oct 09 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
php 动态添加记录
Mar 10 PHP
一贴学会PHP 新手入门教程
Aug 03 PHP
PHP-Java-Bridge使用笔记
Sep 22 PHP
初识Laravel
Oct 30 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
php中用unset销毁变量并释放内存
May 10 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
从零学python系列之从文件读取和保存数据
2014/05/23 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
python中什么是面向对象
2020/06/11 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
违反学校规定检讨书
2014/01/18 职场文书
区三好学生主要事迹
2014/01/30 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2014年技术部工作总结
2014/12/12 职场文书
优秀团队申报材料
2014/12/26 职场文书
用电申请报告范文
2015/05/18 职场文书
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
Vue如何清空对象
2022/03/03 Vue.js
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python