最近复习算法,在此对无限级分类的实现方法稍作整理,当然也是参考了道友的经验,目测适合实际的项目应用,当然,也有不少公司的笔试题还会涉及到呢,有何问题,欢迎各位道友指摘 …
操作环境:
Win10
使用语言:PHP
使用框架:ThinkPHP 3.2.3
♘前期准备
①. 首先,实现无限级分类的方式有:
以父ID设计,运用递归实现的方式
以全路径实现的无限分类方式
②. 其次,数据表设计思路
对应于上述的两种实现方式,那么在数据表设计时也可以有两种方式,参考所给的数据表截图
如果采用 父ID方式,字段只需使用
"id,pid,cate_name"
的主要三个即可如果采用 全路径方式, 字段只需使用
"id,cate_name,path "
的主要三个即可,注意:full_path
其实只作参考即可
♗代码实现
此处,讲解几个核心方法,完整代码可根据后面的附录进行下载参考,请注意此处提及的核心处理代码都在文件
ZmModel.class.php
中
①. 父ID 方式
核心处理代码如下,注意参数备注信息,便于正确的调用
/**
* 数据库设计 递归方式 获取无限极分类数据 由上到下进行获取
* @param int $pid 父级ID,默认为根级分类 0
* @param int $sel_id 所选中的分类ID,多用于前端 selected 标识
* @param array $result 数组整合
* @param int $spac 空格间隔,便于前端缩进显示分类所属级别
* @return array
*/
public function deepCatesForDown($pid = 0,$sel_id = 0,&$result = [],$spac = 0){
//空格数目
$spac += 2;
//从数据表中获取 父级ID为所需 pid 的全部数据
$cateList = $this->db_cate
->where("pid = $pid")
->select();
//TODO 进行遍历处理
foreach ($cateList as $key => $value){
//判断 selected 属性
if ($sel_id == $value['id']){
$selectedStr = "selected";
}else{
$selectedStr = "";
}
$cateList[$key]['cate_name'] = str_repeat(' ',$spac)
.'|--'.$cateList[$key]['cate_name'] ;
$cateList[$key]['selected'] = $selectedStr;
$result[] = $cateList[$key];
//TODO 此处进行了递归操作
$this->deepCatesForDown($value['id'],$sel_id,$result,$spac);
}
return $result;
}
复制
控制器调用参考:
$zmModel = new ZmModel();
$cateListDown = $zmModel->deepCatesForDown(0,6);
$this->assign('cateListDown',$cateListDown);
$this->display();
复制
前端Html数据显示参考:
<h4>递归方式获取 无限级分类数据</h4>
<select>
<volist name="cateListDown" id="vo">
<option {$vo.selected}>{$vo.cate_name}</option>
</volist>
</select>
复制
对应参考上面的介绍方式,核心处理代码如下
/**
* 全路径方式 获取无限极分类数据 由上到下进行获取
* @return array
*/
public function deepCatesFullPathForDown(){
//注意排序方式 自动按要求进行排列
$cateList = $this->db_cate
->field("id,cate_name,path,concat(path,',',id) full_path")
->order('full_path asc')
->select();
$result = [];
//遍历数据 方法同上
foreach ($cateList as $key => $value){
$deep = explode(',',trim($value['full_path'],','));
$cateList[$key]['cate_name'] = str_repeat(' ',count($deep))
."|--".$cateList[$key]['cate_name'];
$result[] = $cateList[$key];
}
return $result;
}
复制
调用及前端显示代码参考同上
♔实现效果
上述的参考代码,只做了下拉框的实现参考,对于全链接方式的实现可直接参考源代码
在这里插入图片描述
☠ 附录
❦
所有评论
加载评论 ...
发表评论