PHP 无限级分类


Posted in PHP onMay 04, 2017

有一段时间没用过无限极分类,不巧今天又用到,所以特地去翻箱回顾以前。为了避免以后找起来麻烦,特地贴在这里。

<?php
/**
 * 无限级分类 类
 */
class Category{
 /**
  * 返回一维数组
  * @param [type] $cate 要递归的数组
  * @param string $html 子级分类前要显示的缩进符号。默认 '─'
  * @param integer $pid 父级分类ID。默认为 0,表示顶级分类
  * @param integer $level level级,配合 $html 显示足够的缩进。默认为 1,表示顶级分类
  * @return [type]   [description]
  */
 static public function unlimitedForLevel($cate, $html = '─', $pid = 0, $level = 1){
  $arr = array();
  foreach($cate as $v){
   if($v['pid'] == $pid){
    $v['level'] = $level;
    $v['html'] = str_repeat($html, $level - 1);
    $arr[] = $v;
    $arr = array_merge($arr, $this->unlimitedForLevel($cate, $html, $v['id'], $level + 1));
   }
  }
  return $arr;
 }
 /**
  * 返回多维数组
  * @param [type] $cate 要递归的数组
  * @param string $name 子级分类在父分类数组中的 key
  * @param integer $pid 父级分类ID。默认为0,表示顶级分类
  * @return [type]  [description]
  */
 static public function unlimitedForlayer($cate, $name = 'child', $pid = 0){
  $arr = array();
  foreach($cate as $v){
   if( $v['pid'] == $pid){
    $v[$name] = self::unlimitedForlayer($cate, $name, $v['id']);
    $arr[] = $v;
   }
  }
  return $arr;
 }
 /**
  * 传递子分类ID返回所有父级分类
  * @param [type] $cate 要递归的数组
  * @param [type] $id 子分类ID
  * @return [type]  [description]
  */
 static public function getParents($cate, $id){
  $arr = array();
  foreach($cate as $v){
   if($v['id'] == $id){
    $arr[] = $v;
    $arr = array_merge(self::getParents($cate, $v['pid']), $arr);
   }
  }
  return $arr;
 }
 /**
  * 传递父级分类ID返回所有子分类ID
  * @param [type] $cate 要递归的数组
  * @param [type] $pid 父级分类ID
  * @return [type]  [description]
  */
 static public function getChildrenId($cate, $pid){
  $arr = array();
  foreach($cate as $v){
   if($v['pid'] == $pid){
    $arr[] = $v['id'];
    $arr = array_merge($arr, self::getChildrenId($cate, $v['id']));
   }
  }
  return $arr;
 }
 /**
  * 传递父级分类ID返回所有子级分类
  * @param [type] $cate 要递归的数组
  * @param [type] $pid 父级分类ID
  * @return [type]  [description]
  */
 static public function getChildren($cate, $pid){
  $arr = array();
  foreach($cate as $v){
   if($v['pid'] == $pid){
    $arr[] = $v;
    $arr = array_merge($arr, self::getChildren($cate, $v['id']));
   }
  }
  return $arr;
 }
}
?>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP的FTP学习(一)[转自奥索]
Oct 09 PHP
PHP中的cookie
Nov 26 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 #PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 #PHP
Laravel5中Cookie的使用详解
May 03 #PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 #PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 #PHP
php中的异常和错误浅析
May 03 #PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 #PHP
You might like
php使用function_exists判断函数可用的方法
2014/11/19 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
URL地址中的#符号使用说明
2011/02/12 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
如何在JavaScript中正确处理变量
2020/12/25 Javascript
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
简单的JAVA编程面试题
2013/03/19 面试题
迟到早退检讨书
2014/02/10 职场文书
防沙治沙典型材料
2014/05/07 职场文书
企业宗旨标语
2014/06/10 职场文书
数学教育专业求职信
2014/07/22 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2015年元旦标语大全
2014/12/09 职场文书
中国世界遗产导游词
2015/02/13 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
springboot入门 之profile设置方式
2022/04/04 Java/Android
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL