thinkphp5使用无限极分类


Posted in PHP onFebruary 18, 2019

本文实例为大家分享了thinkphp5使用无限极分类的具体代码,供大家参考,具体内容如下

1. 先根据普通递归完成无限极分类

2. 再根据分号的类的level 添加字符,再次存入数组的_name字段,最后按照_name字段输出

/**
  * 获得树状数据
  * @param $data 数据
  * @param $title    数据库中字段名
  * @param string $fieldPri  数据库中主键id
  * @param string $fieldPid  数据库中父id
  * @return array
  */
 static public function tree($data, $title, $fieldPri = 'cid', $fieldPid = 'pid')
 {
  if (!is_array($data) || empty($data))
   return array();
  $arr = Data::channelList($data);
  foreach ($arr as $k => $v) {
   $str = "";
   if ($v['_level'] > 2) {
    for ($i = 1; $i < $v['_level'] - 1; $i++) {
     $str .= "│ ";
    }
   }
   if ($v['_level'] != 1) {
    $t = $title ? $v[$title] : "";
    if (isset($arr[$k + 1]) && $arr[$k + 1]['_level'] >= $arr[$k]['_level']) {
     $arr[$k]['_name'] = $str . "├─ " . $v['_html'] . $t;
    } else {
     $arr[$k]['_name'] = $str . "└─ " . $v['_html'] . $t;
    }
   } else {
    $arr[$k]['_name'] = $v[$title];
   }
  }
  //设置主键为$fieldPri
  $data = array();
  foreach ($arr as $d) {
   $data[$d[$fieldPri]] = $d;
  }
  return $data;
 }
/**
  * 获得所有子栏目
  * @param $data 栏目数据
  * @param int $pid 操作的栏目
  * @param string $html 栏目名前字符
  * @param string $fieldPri 表主键
  * @param string $fieldPid 父id
  * @param int $level 等级
  * @return array
  */
 static public function channelList($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
 {
  $data = self::_channelList($data, $pid, $html, $fieldPri, $fieldPid, $level);
  if (empty($data))
   return $data;
 
  foreach ($data as $n => $m) {
   if ($m['_level'] == 1)
    continue;//结束单次循环
   $data[$n]['_first'] = false;
   $data[$n]['_end'] = false;
   if (!isset($data[$n - 1]) || $data[$n - 1]['_level'] != $m['_level']) {
    $data[$n]['_first'] = true; 
   }
   if (isset($data[$n + 1]) && $data[$n]['_level'] > $data[$n + 1]['_level']) {
    $data[$n]['_end'] = true;
   }
  }
  //更新key为栏目主键
  $category=array();
  foreach($data as $d){
   $category[$d[$fieldPri]]=$d;
  }
  return $category;
 }
//只供channelList方法使用
 
 /**
  * 获得所有子栏目
  * @param $data 栏目数据
  * @param int $pid 操作的栏目
  * @param string $html 栏目名前字符
  * @param string $fieldPri 表主键
  * @param string $fieldPid 父id
  * @param int $level 等级
  * @return array
  */
 static private function _channelList($data, $pid = 0, $html = " ", $fieldPri = 'cid', $fieldPid = 'pid', $level = 1)
 {
  if (empty($data))
   return array();
  $arr = array();
 
  foreach ($data as $v) {
   $id = $v[$fieldPri];
   if ($v[$fieldPid] == $pid) {
    $v['_level'] = $level;
    $v['_html'] = str_repeat($html, $level - 1);
    $arr[] = $v;
 
    $tmp = self::_channelList($data, $id, $html, $fieldPri, $fieldPid, $level + 1);
    $arr = array_merge($arr, $tmp);//array_merge把两个数组整合为一个数组
   }
  }
  return $arr;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
apache+php完美解决301重定向的两种方法
Jun 08 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
php通过字符串调用函数示例
Mar 02 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
php二维数组合并及去重复的方法
Mar 04 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
php文件后缀不强制为.php的实操方法
Sep 18 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 PHP
thinkphp5实现无限级分类
Feb 18 #PHP
php实现文章评论系统
Feb 18 #PHP
php无限级分类实现评论及回复功能
Feb 18 #PHP
PHP-FPM 的管理和配置详解
Feb 17 #PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 #PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
Feb 16 #PHP
PHP封装的mysqli数据库操作类示例
Feb 16 #PHP
You might like
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php异常处理方法实例汇总
2015/06/24 PHP
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Python列表切片用法示例
2017/04/19 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
幼儿园教师节活动方案
2014/02/02 职场文书
《争吵》教学反思
2014/02/15 职场文书
小学教师师德承诺书
2014/05/23 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
公司放假通知怎么写
2015/04/15 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书