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 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
PHP中的加密功能
Oct 09 PHP
php win下Socket方式发邮件类
Aug 21 PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 PHP
php修改指定文件后缀的方法
Sep 11 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
合格的PHP程序员必备技能
Nov 13 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
PHP goto语句用法实例
Aug 06 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 PHP
PHP Web表单生成器案例分析
Jun 02 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
程序员编程十条戒律
2009/07/09 PHP
PHP反向代理类代码
2014/08/15 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python正则表达式完全指南
2017/05/25 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
Java基础知识面试题
2014/03/25 面试题
化学学院毕业生自荐信范文
2013/12/17 职场文书
工程安全员岗位职责
2014/03/09 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
交通事故起诉书
2015/05/19 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书