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新手上路(十四)
Oct 09 PHP
在IIS上安装PHP4.0正式版
Oct 09 PHP
php 随机排序广告的实现代码
May 09 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
php实现文章评论系统
Feb 18 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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实现手机归属地查询API接口实现代码
2012/08/27 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
jQuery select控制插件
2009/08/17 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
HTML5实现留言和回复页面样式
2015/07/22 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
pandas 读取各种格式文件的方法
2018/06/22 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
python分布式编程实现过程解析
2019/11/08 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
保安自我鉴定范文
2013/12/08 职场文书
优秀护士演讲稿
2014/04/30 职场文书
数学教研活动总结
2014/07/02 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
银行贷款委托书范本
2014/10/11 职场文书
2014年学习部工作总结
2014/11/12 职场文书
教师工作决心书
2015/02/04 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
高中运动会前导词
2015/07/20 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书