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 相关文章推荐
Linux下实现PHP多进程的方法分享
Aug 16 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
php中spl_autoload详解
Oct 17 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
php实现的用户查询类实例
Jun 18 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 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中的foreach函数
2013/08/31 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
ext 代码生成器
2009/08/07 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
实例讲解python函数式编程
2014/06/09 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
pygame实现飞机大战
2020/03/11 Python
python学生管理系统的实现
2020/04/05 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
优秀老员工获奖感言
2014/02/15 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
撤诉状格式范本
2015/05/19 职场文书
龙猫观后感
2015/06/09 职场文书