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类
Nov 27 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
php ios推送(代码)
Jul 01 PHP
php生成随机颜色方法汇总
Dec 03 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
php 运算符与表达式详细介绍
Nov 30 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
javascript数组详解
2014/10/22 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python操作日期和时间的方法
2014/03/11 Python
Python中str.join()简单用法示例
2018/03/20 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Python中print函数简单使用总结
2019/08/05 Python
Pytorch中Tensor与各种图像格式的相互转化详解
2019/12/26 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
房地产销售计划书
2014/01/10 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
鸟的天堂导游词
2015/01/31 职场文书
质量保证书格式模板
2015/02/27 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js