php两种无限分类方法实例


Posted in PHP onApril 21, 2015

一、递归方法

$items = array(

array('id'=>1,'pid'=>0,'name'=>'一级11'),

array('id'=>2,'pid'=>0,'name'=>'一级12'),

array('id'=>3,'pid'=>1,'name'=>'二级21'),

array('id'=>4,'pid'=>3,'name'=>'三级31'),

array('id'=>5,'pid'=>1,'name'=>'二级22'),

array('id'=>6,'pid'=>3,'name'=>'三级32'),

array('id'=>7,'pid'=>6,'name'=>'四级41'),

);

$i = 0;

function formatTree($arr, $pid = 0){

$tree = array();

$temp = array();

global $i;

if($arr){

foreach($arr as $k=>$v){

if($v['pid'] == $pid){//

$temp = formatTree($arr, $v['id']);

$temp && $v['son'] = $temp;

$tree[] = $v;

}

}

}

return $tree;

}

print_r(formatTree($items));

二、非递归方法
function genTree($items) {

    $tree = array(); //格式化好的树

    foreach ($items as $item)

        if (isset($items[$item['pid']])){

            $items[$item['pid']]['son'][] = &$items[$item['id']];

        }

        else{

            $tree[] = &$items[$item['id']];

        }

    return $tree;

}
$items = array(

    1 => array('id' => 1, 'pid' => 0, 'name' => '一级11'),

    2 => array('id' => 2, 'pid' => 1, 'name' => '二级21'),

    3 => array('id' => 3, 'pid' => 1, 'name' => '二级23'),

    4 => array('id' => 4, 'pid' => 9, 'name' => '三级31'),

    5 => array('id' => 5, 'pid' => 4, 'name' => '四级43'),

    6 => array('id' => 6, 'pid' => 9, 'name' => '三级32'),

    7 => array('id' => 7, 'pid' => 4, 'name' => '四级41'),

    8 => array('id' => 8, 'pid' => 4, 'name' => '四级42'),

    9 => array('id' => 9, 'pid' => 1, 'name' => '二级25'),

    10 => array('id' => 10, 'pid' => 11, 'name' => '二级22'),

    11 => array('id' => 11, 'pid' => 0, 'name' => '一级12'),

    12 => array('id' => 12, 'pid' => 11, 'name' => '二级24'),

    13 => array('id' => 13, 'pid' => 4, 'name' => '四级44'),

    14 => array('id' => 14, 'pid' => 1, 'name' => '二级26'),

    15 => array('id' => 15, 'pid' => 8, 'name' => '五级51'),

    16 => array('id' => 16, 'pid' => 8, 'name' => '五级52'),

    17 => array('id' => 17, 'pid' => 8, 'name' => '五级53'),

    18 => array('id' => 18, 'pid' => 16, 'name' => '六级64'),

);

print_r(genTree($items));
PHP 相关文章推荐
PHP新手上路(六)
Oct 09 PHP
php生成文件
Jan 15 PHP
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php筛选不存在的图片资源
Apr 28 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
php实现数字补零的方法总结
Sep 12 PHP
PHP实现创建以太坊钱包转账等功能
Apr 21 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 #PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 #PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 #PHP
PHP使用递归生成文章树
Apr 21 #PHP
php实现的美国50个州选择列表实例
Apr 20 #PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 #PHP
php中使用base HTTP验证的方法
Apr 20 #PHP
You might like
一个查看session内容的函数
2006/10/09 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
解析PHP的session过期设置
2013/06/29 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
python正则分析nginx的访问日志
2017/01/17 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
python输出数学符号实例
2020/05/11 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
学生党支部先进事迹
2014/02/04 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
党章培训心得体会
2014/09/04 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
2014年英语工作总结
2014/12/20 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
使用 Apache 反向代理的设置技巧
2022/01/18 Servers
代码复现python目标检测yolo3详解预测
2022/05/06 Python