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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
2014过年倒计时示例
Jan 31 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php中错误处理操作实例分析
Aug 23 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
php构造函数与析构函数
2016/04/23 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
Open and Print a Word Document
2007/06/15 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
django框架如何集成celery进行开发
2017/05/24 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
opencv实现图像几何变换
2021/03/24 Python
超市业务员岗位职责
2013/12/05 职场文书
学生个人自我鉴定
2014/03/26 职场文书
高一学生评语大全
2014/04/25 职场文书
学校运动会霸气口号
2014/06/07 职场文书
创文明城市标语
2014/06/16 职场文书