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和ACCESS写聊天室(六)
Oct 09 PHP
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php的curl封装类用法实例
Nov 07 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
php集成动态口令认证
Jul 21 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 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
memcache一致性hash的php实现方法
2015/03/05 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
prototype class详解
2006/09/07 Javascript
javascript 贪吃蛇实现代码
2008/11/22 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python实现保存网页到本地示例
2014/03/16 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
初一英语教学反思
2014/01/11 职场文书
项目总经理岗位职责
2014/02/14 职场文书
母婴店促销方案
2014/03/05 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
护士自荐信怎么写
2015/03/06 职场文书
运动会表扬稿范文
2015/05/05 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
使用Redis做预定库存缓存功能
2022/04/02 Redis