PHP递归实现无限极分类
2015-10-12 14:27
806 查看
实现无限极分类的放哪广发有很多,这里介绍的是递归方法。
准备测试数组:
$cates = array( array( 'id' => 1, 'pid' => 0, 'title' => 'php' ), array( 'id' => 2, 'pid' => 0, 'title' => 'linux' ), array( 'id' => 3, 'pid' => 0, 'title' => 'mysql' ), array( 'id' => 4, 'pid' => 1, 'title' => 'array' ), array( 'id' => 5, 'pid' => 1, 'title' => 'string' ), array( 'id' => 6, 'pid' => 2, 'title' => 'nginx' ), array( 'id' => 7, 'pid' => 4, 'title' => 'array_rand' ), );
组合:一维数组
function get_cate_list($cates, $pid = 0, $level = 0, $html = '|--'){ $temp = array(); foreach ($cates as $v) { if ($v['pid'] == $pid) { $v['level'] = $level + 1; $v['html'] = str_repeat($html, $level + 1); $temp[] = $v; $temp = array_merge($temp, get_cate_list($cates, $v['id'], $level + 1, $html)); } } return $temp; }
组合:多维数组
function get_cate_list_multi($cates, $pid = 0){ $temp = array(); foreach ($cates as $v) { if ($v['pid'] == $pid) { $v['child'] = get_cate_list_multi($cates, $v['id']); $temp[] = $v; } } return $temp; }
给定父id获取所有子分类
function get_cate_son($cates, $pid = 0){ $temp = array(); foreach ($cates as $v) { if ($v['pid'] == $pid) { $temp[] = $v; $temp = array_merge($temp, get_cate_son($cates, $v['id'])); } } return $temp; }
给定子分类的id获取所有父分类:适用于面包屑导航
function get_cate_parent($cates, $id){ $temp = array(); foreach ($cates as $v) { if ($v['id'] == $id) { $temp[] = $v; $temp = array_merge(get_cate_parent($cates, $v['pid']), $temp); } } return $temp; }
/* 打印结果 */ $all = get_cate_list($cates); // $all = get_cate_list_multi($cates); // $son = get_cate_son($cates, 1); // $parent = get_cate_parent($cates, 7); print_r($all); // print_r($son); // print_r($parent);
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#中的尾递归与Continuation详解
- ASP.NET、ASP、PHP、JSP之间有什么区别?