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数组去重的函数代码
Feb 03 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
php实现短信发送代码
Jul 05 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
PHP实现表单提交时去除斜杠的方法
Dec 26 PHP
PHPUnit测试私有属性和方法功能示例
Jun 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
php 调用ffmpeg获取视频信息的简单实现
2017/04/03 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
js类中的公有变量和私有变量
2008/07/24 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
初中语文教学随笔
2015/08/15 职场文书
学习经验交流会总结
2015/11/02 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
python实现简单的三子棋游戏
2022/04/28 Python