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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
PHP里的单例类写法实例
Jun 25 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
Zend Framework分页类用法详解
Mar 22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
老生常谈PHP数组函数array_merge(必看篇)
May 25 PHP
PHP实现权限管理功能示例
Sep 22 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
Apr 30 PHP
php报错502badgateway解决方法
Oct 11 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 PHP
如何重写Laravel异常处理类详解
Dec 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
vue组件创建的三种方式小结
2020/02/03 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
Python列表切片操作实例总结
2019/02/19 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
酒店员工培训方案
2014/06/02 职场文书
大专生自荐书范文
2014/06/22 职场文书
移交协议书
2014/08/19 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
小学体育组工作总结
2015/08/13 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
四十九个javascript小知识实用技巧
2021/11/20 Javascript
MySQL 计算连续登录天数
2022/05/11 MySQL
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL