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执行sql语句的写法
Mar 10 PHP
php去除重复字的实现代码
Sep 16 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
php数组去重复数据示例
Feb 25 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
Nov 22 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
如何离线执行php任务
Feb 21 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
PHP日志LOG类定义与用法示例
Sep 06 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
jQuery示例收集
2010/11/05 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
JavaScript DOM 对象深入了解
2016/07/20 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
python基于event实现线程间通信控制
2020/01/13 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
商场促销活动方案
2014/02/08 职场文书
安全施工责任书
2014/08/25 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2015年少先队活动总结
2015/03/25 职场文书
行政前台岗位职责
2015/04/16 职场文书
小学英语听课心得体会
2016/01/14 职场文书
创业计划书之服装
2019/10/07 职场文书
Python实现位图分割的效果
2021/11/20 Python
聊聊Python String型列表求最值的问题
2022/01/18 Python