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批量生成随机用户名
Jul 10 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
Laravel实现ApiToken认证请求
Oct 14 PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 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简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
泛谈JS逻辑判断选择器 || &&
2019/05/24 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
python安装Scrapy图文教程
2017/08/14 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python实现Adapter模式实例代码
2018/02/09 Python
django 外键model的互相读取方法
2018/12/15 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
小学生迎国庆演讲稿
2014/09/05 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers