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常用代码大全(新手入门必备)
Jun 29 PHP
PHP 数组排序方法总结 推荐收藏
Jun 30 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
PHP多线程编程之管道通信实例分析
Mar 07 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
cakephp常见知识点汇总
Feb 24 PHP
php实现的错误处理封装类实例
Jun 20 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
PHP实现的策略模式示例
Mar 20 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
Python实现的个人所得税计算器示例
2018/06/01 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python将视频转换为全字符视频
2019/04/26 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
三个Unix的命令面试题
2015/04/12 面试题
好的自荐信的要求
2013/10/30 职场文书
社区活动邀请函范文
2014/01/29 职场文书
创新比赛获奖感言
2014/02/13 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
留守儿童工作方案
2014/06/02 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
Python如何使用循环结构和分支结构
2022/04/13 Python