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 相关文章推荐
杏林同学录(九)
Oct 09 PHP
模仿OSO的论坛(五)
Oct 09 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
10个简化PHP开发的工具
Dec 25 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
php实现分页显示
Nov 03 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 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入门速成教程
2007/03/19 PHP
MySQL授权问题总结
2007/05/06 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python深度优先算法生成迷宫
2018/01/22 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
Python colormap库的安装和使用详情
2020/10/06 Python
python性能测试工具locust的使用
2020/12/28 Python
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
水利学院求职自荐书
2014/02/01 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
施工安全标语
2014/06/07 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
质量负责人岗位职责
2015/02/15 职场文书
党校个人总结
2015/03/04 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python