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 相关文章推荐
通过文字传递创建的图形按钮
Oct 09 PHP
PHP可逆加密/解密函数分享
Sep 25 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
php简单获取目录列表的方法
Mar 24 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
PHP使用两个栈实现队列功能的方法
Jan 15 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 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与SQL注入攻击[二]
2007/04/17 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Use Word to Search for Files
2007/06/15 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python的标准模块包json详解
2017/03/13 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
经典c++面试题三
2015/07/08 面试题
年度考核登记表个人总结
2015/03/06 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
如何利用python实现Simhash算法
2022/06/28 Python