<?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. 2n皇后 - 回溯

    题目地址:http://www.51cpc.com/web/problem.php?id=1172 Summarize: 1. 递归回溯: 2. 先扫完一种皇后,再扫描另一种: 3. 循环输入: 4. ...

  2. 使用yolo3模型训练自己的数据集

    使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlo ...

  3. BZOJ 1012 洛谷1198 最大数 maxnumber

    用线段数维护即可 #include<cstdio> #include<algorithm> #define ls (cur<<1) #define rs (cur& ...

  4. [bzoj1500][NOI2005 维修数列] (splay区间操作)

    Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目. 第2行包含N个数字,描述初始时的数列. 以下M行,每 ...

  5. mysql function 查询子级机构

    DROP FUNCTION IF EXISTS queryChildOrgList;CREATE FUNCTION queryChildOrgList(id VARCHAR(20))RETURNS V ...

  6. RSA的共模攻击

    实验吧题目:http://www.shiyanbar.com/ctf/1834 参考:http://hebin.me/2017/09/07/%e8%a5%bf%e6%99%aectf-strength ...

  7. 20180906关于mysql启动

    转自 https://blog.csdn.net/sqlserverdiscovery/article/details/52808541

  8. tomcat上传图片失败

    今天,突然遇到个奇怪的问题,tomcat上传图片时好时坏,经查线上四台服务有一台服务器硬盘满了. 解决一下硬盘空间的问题,有好使了,那么图片上传通过流写到远程对象存储服务中,并没有落盘和硬盘满有哪些关 ...

  9. 表单中的日期 字符串和Javabean中的日期类型的属性自动转换

    搞了一上午的bug最终还是因为自己springMVC的注解不熟悉的原因,特记录. 在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支 ...

  10. C++中设计一个类,使其不能继承

    1.C++11中已经有了final关键字:它的作用是指定类的虚函数不能被该类的继承类覆盖(override),或者是指定一个类成为一个不能被继承的类(final class) 2.派生类用调用基类的构 ...