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 定界符 使用技巧
Jun 14 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
网站用php实现paypal整合方法
Nov 28 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
php简单socket服务器客户端代码实例
May 18 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
Nov 15 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 27 PHP
基于PHP实现短信验证码发送次数限制
Jul 11 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python处理文本文件并生成指定格式的文件
2014/07/31 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
python购物车程序简单代码
2018/04/18 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Python实现Dijkstra算法
2018/10/17 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
英国皇室御用百货:福南梅森(Fortnum & Mason)
2017/12/03 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
教师演讲稿范文
2014/01/08 职场文书
学校读书活动总结
2014/06/30 职场文书
黄河绝恋观后感
2015/06/08 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python