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 相关文章推荐
PHP5.0对象模型探索之抽象方法和抽象类
Sep 05 PHP
十天学会php(3)
Oct 09 PHP
php 中include()与require()的对比
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
浅谈PHP中的
Apr 23 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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
咖啡与牛奶
2021/03/03 冲泡冲煮
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
es5 类与es6中class的区别小结
2020/11/09 Javascript
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python 元类使用说明
2009/12/18 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python算法应用实战之栈详解
2017/02/04 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
python的链表基础知识点
2020/09/13 Python
Python 创建守护进程的示例
2020/09/29 Python
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
30岁生日感言
2014/01/25 职场文书
岗位职责风险点
2014/03/12 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
教师一岗双责责任书
2014/04/16 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle