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开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
php flv视频时间获取函数
Jun 29 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
Jul 03 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
smarty中常用方法实例总结
Aug 07 PHP
php获取图片信息的方法详解
Dec 10 PHP
基于php实现的php代码加密解密类完整实例
Oct 12 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
php cookies中删除的一般赋值方法
2011/05/07 PHP
jQuery 跨域访问问题解决方法
2009/12/02 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
Dojo 学习要点
2010/09/03 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
js评分组件使用详解
2017/06/06 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
python写的一个文本编辑器
2014/01/23 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
Python单元测试与测试用例简析
2019/11/09 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
小学生家长评语大全
2014/02/10 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
欢度春节标语
2014/07/01 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2014年检验科工作总结
2014/11/22 职场文书
营运督导岗位职责
2015/04/10 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
学习经验交流会总结
2015/11/02 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书