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 相关文章推荐
生成静态页面的PHP类
Nov 25 PHP
php中的数组操作函数整理
Aug 18 PHP
php 字符串函数收集
Mar 29 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
PHP图片加水印实现方法
May 06 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
PHP基于cookie实现统计在线人数功能示例
Jan 16 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
PHP获取学生成绩的方法
Nov 17 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
一个简洁的多级别论坛
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php字符串函数学习之substr()
2015/03/27 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
学习Vue组件实例
2018/04/28 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
在Python中使用Mako模版库的简单教程
2015/04/08 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
深入了解Python enumerate和zip
2020/07/16 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
上海期货面试题
2014/01/31 面试题
解除施工合同协议书
2014/10/17 职场文书
教师党员自我评价范文
2015/03/04 职场文书
合作与交流自我评价
2015/03/09 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS