无限极分类算法 thinkphp
<?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的更多相关文章
- thinkphp 实现无限极分类
thinkphp实现无限极分类,获得所有的子类 今天学习测试了一上午也没有整出来,一开始一直没有办法把所有的子分类拿出来. 最后找到原因: 每次调用的时候没有在最后return的位置我没有选择retu ...
- [thinkphp] 无限极分类
<?php /* * 无限极分类 类 */ header("Content-Type: text/html; charset=UTF-8"); Class Category ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- 夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)
我们刚才只是完成了添加的一部分,但是我们的上级分类也不能永远都是只有一个死的嘛,所以我们需要对她进行修改: 我们先将add方法里面的数据查出来再说: 然后在模板页进行遍历: 展示效果如下所示: 虽然是 ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
- thinkphp5.0无限极分类及格式化输出
首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...
- sqlalchemy tree 树形分类 无限极分类的管理。预排序树,左右值树。sqlalchemy-mptt
简介: 无限极分类是一种比较常见的数据格式,生成组织结构,生成商品分类信息,权限管理当中的细节权限设置,都离不开无限极分类的管理. 常见的有链表式,即有一个Pid指向上级的ID,以此来设置结构.写的时 ...
- DotNet菜鸟入门之无限极分类(一)设计篇
写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到.而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处.所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下 ...
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
随机推荐
- java面试题链接
http://blog.csdn.net/jackfrued/article/details/17339393
- case when里的like功能 ////// 截取(substr)
case when里的like功能 假如要用到case when又要用到like这样的功能,即如果字符串包含‘语文’就怎么怎么样,包含‘数学’就怎么怎么样,包含‘英语’就怎么怎么样,like是用于wh ...
- UVA - 820 Internet Bandwidth(最大流模板题)
题目: 思路: 直接套最大流的模板就OK了,注意一下输出的格式. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define M ...
- LINUX-系统信息
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- Latex Notes
latex Table of Contents 1. Presentation/Slides with Beamer 2. Drawing in LaTex With TikZ 3. Tracked ...
- JSON.parseObject将json字符串转换为bean类,是否大小写敏感区分---https://blog.csdn.net/mathlpz126/article/details/80684034
JSON.parseObject将json字符串转换为bean类,是否大小写敏感区分 https://blog.csdn.net/mathlpz126/article/details/80684034
- noip模拟赛 梦想
题目描述 LYK做了一个梦. 这个梦是这样的,LYK是一个财主,有一个仆人在为LYK打工. 不幸的是,又到了月末,到了给仆人发工资的时间.但这个仆人很奇怪,它可能想要至少x块钱,并且当LYK凑不出恰好 ...
- HDU A/B 扩展欧几里得
Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). Input 数据的 ...
- qscoj Round 1(div 2)
卿学姐OJ……很休闲啊……? A 分析:枚举/exgcd B 分析:栈模拟 弄个栈模拟配对过程,将能够配对的()位置染色,最后最长的一段染色区间就是答案 C 分析:dp f[i][j]表示前i个物品, ...
- css上下垂直居中方法总结
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...