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
dedecms模板标签代码官方参考
Mar 17 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
探讨如何把session存入数据库
Jun 07 PHP
php统计文章排行示例
Mar 04 PHP
php学习笔记之面向对象
Nov 08 PHP
关于PHP开发的9条建议
Jul 27 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
php函数式编程简单示例
Aug 08 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php使用sql server验证连接数据库的方法
2014/12/25 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
js闭包用法实例详解
2016/12/13 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
基于element-ui的rules中正则表达式
2018/09/04 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Python中对列表排序实例
2015/01/04 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
导游词之无锡华莱坞
2019/12/02 职场文书