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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
php 删除数组元素
Jan 16 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
基于php权限分配的实现代码
Apr 28 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
Jun 05 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
php组合排序简单实现方法
Oct 15 PHP
php上传excel表格并获取数据
Apr 27 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 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
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
JavaScript 数组详解
2013/10/10 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
进一步探究Python中的正则表达式
2015/04/28 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
函授本科毕业自我鉴定
2013/10/09 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
2014年林业工作总结
2014/12/05 职场文书
安全教育第一课观后感
2015/06/17 职场文书
欠条样本
2015/07/03 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
OpenCV实现反阈值二值化
2021/11/17 Java/Android
tomcat下部署jenkins的方法
2022/05/06 Servers