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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
PHP音乐采集(部分代码)
Feb 14 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
php内存缓存实现方法
Jan 24 PHP
PHP实现合并discuz用户
Aug 05 PHP
php文件上传你必须知道的几点
Oct 20 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP echo()函数讲解
Feb 15 PHP
PHP常用函数之格式化时间操作示例
Oct 21 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
Javascript函数的参数
2015/07/16 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
Python实现的简单排列组合算法示例
2018/07/04 Python
python实现简单的文字识别
2018/11/27 Python
python中while和for的区别总结
2019/06/28 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
运动会800米加油稿
2014/02/22 职场文书
教师考核材料
2014/05/21 职场文书
Elasticsearch 批量操作
2022/04/19 Python