php实现无限级分类


Posted in PHP onDecember 24, 2014
$area = array(

array('id'=>1,'name'=>'安徽','parent'=>0),

array('id'=>2,'name'=>'海淀','parent'=>7),

array('id'=>3,'name'=>'濉溪县','parent'=>5),

array('id'=>4,'name'=>'昌平','parent'=>7),

array('id'=>5,'name'=>'淮北','parent'=>1),

array('id'=>6,'name'=>'朝阳','parent'=>7),

array('id'=>7,'name'=>'北京','parent'=>0),

array('id'=>8,'name'=>'上地','parent'=>2)

);

1.递归,查找子孙树

function subtree($arr,$id=0,$lev=1) {

    $subs = array(); // 子孙数组

    foreach($arr as $v) {

        if($v['parent'] == $id) {

            $v['lev'] = $lev;

            $subs[] = $v; // 举例说找到array('id'=>1,'name'=>'安徽','parent'=>0),

            $subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));

        }

    }

    return $subs;

}

$tree = subtree($area,0,1);

foreach($tree as $v) {

    echo str_repeat('  ',$v['lev']),$v['name'],'<br />';

}

2.递归,求家谱树

家谱树的应用 ,如面包屑导航 首页 > 手机类型 > CDMA手机 > 公益PHP > 递归应用

function familytree($arr,$id) {

    $tree = array();

    foreach($arr as $v) {

        if($v['id'] == $id) {// 判断要不要找父栏目

            if($v['parent'] > 0) { // parnet>0,说明有父栏目

                $tree = array_merge($tree,familytree($arr,$v['parent']));

            }

            $tree[] = $v; // 以找到上地为例

        }

    }

    return $tree;

}

print_r(familytree($area,8)); // 北京->海淀->上地

2.迭代,求家谱树

// 迭代,效率比递归高,代码也没多.

// 找家谱树推荐用迭代

function tree($arr,$id) {

    $tree = array();

    while($id !== 0) {

        foreach($arr as $v) {

            if($v['id'] == $id) {

                $tree[] = $v;

                $id = $v['parent'];

                break;

            }    

        }

    }

    return $tree;

}

print_r(tree($area,8));
PHP 相关文章推荐
PHP的开发框架的现状和展望
Mar 16 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 #PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 #PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 #PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 #PHP
php将access数据库转换到mysql数据库的方法
Dec 24 #PHP
php启用sphinx全文搜索的实现方法
Dec 24 #PHP
php中mail函数发送邮件失败的解决方法
Dec 24 #PHP
You might like
mysql 字段类型说明
2007/04/27 PHP
How do I change MySQL timezone?
2008/03/26 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php短信接口代码
2016/05/13 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
asp批量修改记录的代码
2008/06/25 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Python smallseg分词用法实例分析
2015/05/28 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
自定义django admin model表单提交的例子
2019/08/23 Python
通过代码实例了解Python sys模块
2020/09/14 Python
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
前台接待的工作职责
2013/11/21 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
大学生求职信范文
2014/05/24 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书