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中使用反射技术的架构插件使用说明
May 18 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
php接口隔离原则实例分析
Nov 11 PHP
PHP 使用位运算实现四则运算的代码
Mar 09 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
php 静态变量的初始化
2009/11/15 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
javascript实现table表格隔行变色的方法
2015/05/13 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python中的global关键字的使用方法
2019/08/20 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
调解员先进事迹材料
2014/02/07 职场文书
婚假请假条怎么写
2014/04/10 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技