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 动态执行带有参数的类方法
Apr 10 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
深入密码加salt原理的分析
Jun 06 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
php实现图片缩略图的方法
Mar 29 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
Angularjs上传图片实例详解
2017/08/06 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
Python合并多个装饰器小技巧
2015/04/28 Python
利用Python破解斗地主残局详解
2017/06/30 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
Python实现简单的语音识别系统
2017/12/13 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python让列表倒序输出的实例
2018/06/25 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Django视图、传参和forms验证操作
2020/07/15 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
奶茶专卖店创业计划书
2014/01/18 职场文书
函授毕业自我鉴定
2014/02/04 职场文书
优秀教师事迹材料
2014/12/15 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
教你用eclipse连接mysql数据库
2021/04/22 MySQL