tp5递归 无限级分类详解


Posted in PHP onOctober 18, 2019

在TP5公共common.php文件里写

<?php
 //计算某个类别所属的类别层数
 function getcatelayer($cateid,$flag=1){
 $cates = M('Gcategory');
 $ini['cate_id'] = $cateid;
 $arr = $cates->where($ini)->find();
 if($arr['parent_id']!=0){
  $flag = getcatelayer($arr['parent_id'],$flag+1);
 }
 return $flag;
 }
 
//类别递归(单层)
function getone($arr,$parent=0,$lev=0){
 //迭代
 $task=array($parent);//任务数组
 $tree=array();//结果数组
 while (!empty($task)){
 $flg=false;
 foreach ($arr as $k=>$v){
  
  if ($v['parent_id']==$parent) {
  $tree[]=array(
   'id'=>$v['cate_id'],
   'name'=>$v['cate_name'],
   'lev'=>$lev
  );
  array_push($task, $v['cate_id']);
  $parent=$v['cate_id'];
  $lev=$lev+1;
  unset($arr[$k]);
  $flg=true;
  }
 
 }
 if ($flg==false) {
  array_pop($task);
  $parent=end($task);
  $lev=$lev-1;
 }
 }
 return $tree;
 
}
//类别递归(多层)
function getCates($arr,$pid=0)
{
 for($i=0; $i<count($arr); $i++){
  if($arr[$i]['parent_id']==$pid){
  $newArr[] = array(
   "id"=>$arr[$i]['cate_id'],
   "name"=>$arr[$i]['cate_name'],
   'son'=>getCates($arr,$arr[$i]['cate_id']),
  );
  }
 }
 return $newArr;
}
 
 
//查询类别所属级
function getlayer($cateid,$flg=1)
{
 $gcg=M("Gcategory");
 $ini["cate_id"]=$cateid;
 $cateArr=$gcg->where($ini)->find();
 if($cateArr['parent_id']!=0)
 {
 $flg=getlayer($cateArr['parent_id'],$flg+1);
 }
 return $flg;
}

一般只用其中的递归单层就可以了

控制器中

<?php
//分类管理
namespace app\admin\Controller;
use think\Db;
use think\Controller;
class CategoryController extends Controller
{ 
 /**
 * 分类列表页(递归)
 */
 public function category_list()
 {
 header('content-type:text/html;charset=utf-8');
 $categoryArr=db::name('表名')->select();
 //调用递归函数
 $getall=getone($categoryArr);
 $this->assign("getall",$getall);
 return $this->fetch()
 }

视图 view中

<div class="conShow">
        <table border="1" cellspacing="0" cellpadding="0">
          <tr>
            <td width="100px" class="tdColor tdC">id</td>
            <td width="150px" class="tdColor">汽车类型</td>
            <td width="180px" class="tdColor">操作</td>
          </tr>
          {foreach name="getall" id="v"}
          <tr>
            <td>{$v.id}</td>
            <td >{php}echo str_repeat(' ',$v['lev']*2){/php}|-{$v['name']}</td>
            <td><a href="connoisseuradd.html" rel="external nofollow" ><img class="operation"
                                src="/img/admin/update.png"></a> <img class="operation delban"
                                                   src="/img/admin/delete.png"></td>
          </tr>
          {/foreach}
        </table>
        <div class="paging">此处是分页</div>
      </div>

以上这篇tp5递归 无限级分类详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
一个实用的php验证码类
Jul 06 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 #PHP
PHP的Trait机制原理与用法分析
Oct 18 #PHP
tp5修改(实现即点即改)
Oct 18 #PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 #PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 #PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 #PHP
tp5.1 实现setInc字段自动加1
Oct 18 #PHP
You might like
一个改进的UBB类
2006/10/09 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
php实现微信模板消息推送
2018/03/30 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python网站验证码识别
2016/01/25 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
python中比较两个列表的实例方法
2019/07/04 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
服装机修工岗位职责
2013/12/26 职场文书
自我鉴定书面格式
2014/01/13 职场文书
演讲稿格式
2014/04/30 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
放弃继承权公证书
2015/01/23 职场文书
项目经理岗位职责
2015/01/31 职场文书
党员进社区活动总结
2015/05/07 职场文书
运动会宣传语
2015/07/13 职场文书