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输出Excel文件类
Feb 08 PHP
php cli 小技巧
Jun 03 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 PHP
phpnow php探针环境检测代码
Nov 04 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 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
PHP 字符串 小常识
2009/06/05 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
python操作gitlab API过程解析
2019/12/27 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
群众路线教育实践活动方案
2014/02/02 职场文书
工艺员岗位职责
2014/02/11 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
毕业实习单位意见
2015/06/04 职场文书
公司仓库管理制度
2015/08/04 职场文书
公开致歉信
2019/06/24 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
python 命令行传参方法总结
2021/05/25 Python
手残删除python之后的补救方法
2021/06/26 Python