<?php
/*
* 本类实现的是无限级递归分类的管理
*/
class InfiniteLevel{

public $id_str="";
public function add_top($modelName,$data,$id=0){//添加顶级分类
$model = D($modelName);
$data['parent_id_str'] = ',0,';
$data['depth'] = '0';
$data['create_time'] = time();
if ($id>0) {
$model->where('id="'.$id.'"')->save($data);
}else{
$id = $model->add($data);
}
return $id;
}
public function add_child($modelName,$data,$parentId=0){
$model = D($modelName);
if ($parentId>0) {
$tempModel = $model->where(array('id'=>$parentId))->find();
$depth = $tempModel['depth']+1;
$parent_id_str = $tempModel['parent_id_str'].$parentId.',';
$data['parent_id_str'] = $parent_id_str;
$data['depth'] = $depth;
$data['create_time'] = time();
$id = $model->add($data);
return $id;
}
}
public function move(){}  //项目暂时用不上,以后再写把
public function delete(){} //项目暂时用不上,以后再写把

//1
public function list_model($modelName){
$model = D($modelName);
$list = $this->_all_child($modelName);
return urldecode(urldecode(json_encode($list)));
}
//2
private function _all_child($modelName,$parentId=0,$depth=0,$data=NULL){
$model = D($modelName);
$data['parent_id'] = $parentId;
$data['depth'] = $depth;
$data['is_deleted'] =0;
$childArr = $model->field('id,name,parent_id,parent_id_str,depth')->where($data)->select();

$maxNum = count($childArr);
if ($maxNum>0) {
foreach ($childArr as $key => $value) {
$value['name'] = urlencode($value['name']);
$item = $this->_all_child($modelName,$value['id'],($value['depth']+1),$childArr);
if ($item) {
foreach ($item as $k => $v) {
$v['name'] = urlencode($v['name']);
$item[$k] = $v;
}
$value['child'] = $item;
$childArr[$key] = $value;
}
}

return $childArr;
}else{
return;
}
}

//
public function _self_child($modelName,$parentId=0,$num=0){

$model = D($modelName);
$data['parent_id'] = $parentId;
$data['is_deleted'] =0;
$childArr = $model->field('id,name,parent_id,parent_id_str,depth')->where($data)->select();
if($num==0){
$id_str=$parentId.",";
}else{
$id_str="";
}

$maxNum = count($childArr);
if ($maxNum>0) {

foreach ($childArr as $key => $value) {
$id_str.=$value['id'].",";
$item = $this->_self_child($modelName,$value['id'],$num=1);
$id_str.=$item;

}
return $id_str;
}else{
return;
}
}
}

无限极分类算法 thinkphp的更多相关文章

  1. thinkphp 实现无限极分类

    thinkphp实现无限极分类,获得所有的子类 今天学习测试了一上午也没有整出来,一开始一直没有办法把所有的子分类拿出来. 最后找到原因: 每次调用的时候没有在最后return的位置我没有选择retu ...

  2. [thinkphp] 无限极分类

    <?php /* * 无限极分类 类 */ header("Content-Type: text/html; charset=UTF-8"); Class Category ...

  3. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  4. 夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)

    我们刚才只是完成了添加的一部分,但是我们的上级分类也不能永远都是只有一个死的嘛,所以我们需要对她进行修改: 我们先将add方法里面的数据查出来再说: 然后在模板页进行遍历: 展示效果如下所示: 虽然是 ...

  5. PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

    当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究.   到网上一搜php无限极分类,很多,但好多都是一 ...

  6. thinkphp5.0无限极分类及格式化输出

    首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...

  7. sqlalchemy tree 树形分类 无限极分类的管理。预排序树,左右值树。sqlalchemy-mptt

    简介: 无限极分类是一种比较常见的数据格式,生成组织结构,生成商品分类信息,权限管理当中的细节权限设置,都离不开无限极分类的管理. 常见的有链表式,即有一个Pid指向上级的ID,以此来设置结构.写的时 ...

  8. DotNet菜鸟入门之无限极分类(一)设计篇

    写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到.而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处.所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下 ...

  9. PHP实现无限极分类的两种方式,递归和引用

    面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...

随机推荐

  1. 使用JavaScript制作一个好看的轮播图

    目录 使用JavaScript制作出好看的轮播图效果 准备材料 1.图片若干张(包括轮播图和按钮的图片) 2.将按钮的图片应用到按钮上的CSS样式文件 3.实现轮播和点击跳转的JavaScript代码 ...

  2. Game Rank(NCPC 2016 大模拟)

    题目: The gaming company Sandstorm is developing an online two player game. You have been asked to imp ...

  3. Ice Cream Tower(The 2016 ACM-ICPC Asia China-Final Contest 二分&贪心)

    题目: Mr. Panda likes ice cream very much especially the ice cream tower. An ice cream tower consists ...

  4. dp专题备忘录

    hdu 1024:基础dp题 hdu 1029:主元素问题,很快的解法,计数器 hdu 1069:LIS hdu 1074:数位dp,数位dp基础 hdu 1257:简单LIS,要仔细分析为什么是求最 ...

  5. vue.js组件之间的通讯-----父亲向儿子传递数据,儿子接收父亲的数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JSOI最大值 (线段树)

    change 单点修改 query 区间最值 Program XJOI2321; ; ..maxn*] of longint; i,m,n,ans,p,x:longint; ch:char; func ...

  7. Ubuntu 16.04安装Adobe AIR

    安装: wget -O adobe-air.sh http://drive.noobslab.com/data/apps/AdobeAir/adobe-air.sh chmod +x adobe-ai ...

  8. Mcrouter-基于Memcached协议的缓存层流量管理工具(Memcached集群的另一个选择)(转)

    Mcrouter 是一个基于Memcached协议的路由器,它是 Facebook缓存架构的核心组件,在峰值的时候,它能够处理每秒50亿次的请求.近日,Facebook开放了Mcrouter的源代码, ...

  9. FAST_START_MTTR_TARGET

    Release 9i introduced a new parameter, FAST_START_MTTR_TARGET, that makes controlling instance recov ...

  10. 当你买了一辆全车搭载Android操作系统的某侠电动汽车以后

    前两天,小编的朋友圈被号称"中国特斯拉"的某侠超级电动跑车刷爆了.秉着喷喷更健康的精神.小编来为大家讲述一下.假设你买了一辆全车搭载着Android操作系统的某侠电动车,可能会遇 ...