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与SQL注入攻击[三]
Apr 17 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
thinkphp循环结构用法实例
Nov 24 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
非常经典的PHP文件上传类分享
May 15 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
基于php编程规范(详解)
Aug 17 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 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
星际原理概述
2020/03/04 星际争霸
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
Javascript Global对象
2009/08/13 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
js实现二级导航功能
2017/03/03 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
详解React中的组件通信问题
2017/07/31 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
使用JavaScript破解web
2018/09/28 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
Python-基础-入门 简介
2014/08/09 Python
简单上手Python中装饰器的使用
2015/07/12 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
火山动力Java笔试题
2014/06/26 面试题
优秀护士演讲稿
2014/04/30 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
golang中的空接口使用详解
2021/03/30 Python
用Python将库打包发布到pypi
2021/04/13 Python
python 算法题——快乐数的多种解法
2021/05/27 Python