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脚本的10个技巧(6)
Oct 09 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
PHP数组实例总结与说明
Aug 23 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
Yii数据库缓存实例分析
Mar 29 PHP
XHProf报告字段含义的解析
May 17 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
PHP PDOStatement::rowCount讲解
Feb 01 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
JS处理VBArray的函数使用说明
2008/05/11 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
python多线程编程方式分析示例详解
2013/12/06 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
python实现批量改文件名称的方法
2015/05/25 Python
Python列表切片用法示例
2017/04/19 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
python可以用哪些数据库
2020/06/22 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
2013/01/30 HTML / CSS
拉丁舞学习者的自我评价
2013/10/27 职场文书
银行会计业务的个人自我评价
2013/11/02 职场文书
学生干部的自我评价分享
2014/01/18 职场文书
争先创优个人总结
2015/03/04 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android