操作环境:
Win10
使用语言:PHP
使用框架:ThinkPHP 3.2.3
"id,pid,cate_name"
的主要三个即可"id,cate_name,path "
的主要三个即可,注意:full_path
其实只作参考即可
ZmModel.class.php
中 /**
* 数据库设计 递归方式 获取无限极分类数据 由上到下进行获取
* @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();
<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;
}