企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
blog_category id smallint 不是null 主键 自增 无符号 name char 50 不是null EmptyString //查询用char空间换时间 parent_id small 不是null 0 //上级ID 0表示主ID sort int 不是null 0 //上级ID 0表示主ID is_show tinyint 不是null 1 //是否显示1显示 0不显示 我们给多点数据方便排序演示 控制器代码拿到数据集调用common公共文件中的方法 (递归方法写在公共文件中) $db = Db::name('category'); $category = $db->order('sort')->select(); //获取了一段数据集 $category = category_merge($category);//开始使用递归方法 common.php代码 ``` function category_merge($data,$parent_id=0,$level=0){ //该方法参1:数据集(db那边select的数据集) 参2:父id,0表示顶级 参三:层级 $res = []; //空数组 留着合并数组使用 foreach ($data as $v){ if($v['parent_id']==$parent_id){ $v['level'] = $level; $res[] = $v; $res = array_merge($res,category_merge($data,$v['id'],$level+1)); } } return $res; } ``` ``` //递归的思路 //foreach遍历数据集 有多少条数据执行多少次 //每次查询中 列出pid=0就是顶级分类 //然后返回到该函数传递$v['id'](这是该顶级分的id值) //得到顶级分类的id 我们该分类的子分类pid就是顶级分类的id值 //这时遍历一下啊数据集 条件是pid=我们传递顶级分类的id //拿到得到的数据在合并到数组 在遍历查子分类的id 如果查询到继续合并 没有就跳出 主遍历次数 //继续数据集第一次条件遍历的下次遍历 依次类推实现递归 //array_merge() 函数把一个或多个数组合并为一个数组 ``` 再把$category数组传递给模板 通过递归方法我们会得到$category['level'] 层级 前端代码 str_repeat("Shanghai",5); 函数解释把字符串 "Shanghai " 重复 5 次: 还有一种思路层级敢 swich方法 case = 0 输出+--- case=1输出+------ 类推这种逻辑写 ``` <select name="parent_id" class="select"> <option value="0">=作为一级分类=</option> {foreach $category as $v} <option value="{$v.id}"{if $row.parent_id == $v.id} selected{/if}>{:str_repeat('&nbsp;&nbsp;&nbsp;',$v['level'])}{$v.name} </option> {/foreach} </select> ```