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查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
PHP利用header跳转失效的解决方法
Oct 24 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
PHP函数超时处理方法
Feb 14 PHP
PHP Cookie学习笔记
Aug 23 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
基于php伪静态的实现方法解析
Jul 31 PHP
PHP 实现链式操作
Mar 09 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 addslashes 函数详细分析说明
2009/06/23 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
php实例分享之二维数组排序
2014/05/15 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
小议Javascript中的this指针
2010/03/18 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
2020/02/12 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
会计辞职信范文
2014/01/15 职场文书
运动会通讯稿400字
2014/01/28 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
防火标语大全
2014/10/06 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python