thinkphp中如何实现无限级分类?
thinkphp中如何实现无限级分类?
一、总结
1、数据表设计+递归算法
二、php实现无限级分类实例总结
1、数据库数据如下:
2、任务需求:给一个id,求自己和所有父亲。
3、实现代码如下:thinkphp中的模型层
1 <?php 2 namespace app\index\model; 3 use think\Model; 4 5 class Base extends Model 6 { 7 8 //递归具体将数据按照从父亲到孩子开始排序 9 public function recursionSortModule($modules,$pid=0){ 10 static $arr=array(); 11 foreach ($modules as $k => $v) { 12 if ($v['pid']==$pid) { 13 $arr[]=$v; 14 $this->recursionSortModule($modules,$v['id']); 15 } 16 } 17 return $arr; 18 } 19 20 // 将数据按照从父亲到孩子开始排序 21 public function sortModule(){ 22 $modules=db('module')->select(); 23 $sortModules=$this->recursionSortModule($modules); 24 return $sortModules; 25 } 26 27 // 需求:根据一个moduleid,获取它自己以及他的所有父亲 28 public function getAllParents($id){ 29 //1、将数据按照从父亲到孩子开始排序 30 $sortModules=$this->sortModule(); 31 //2、从排序好的数组由下往上取出自己以及它的所有父亲 32 $ans=array(); 33 foreach (array_reverse($sortModules) as $key => $value) { 34 if ((int)$value['id']==(int)$id) { 35 $ans[]=$value; 36 $id=$value['pid']; 37 } 38 } 39 return array_reverse($ans); 40 } 41 42 }
4、性能分析:
其实感觉这样排序后找的效果还不如直接递归拿自己和父亲
三、测试题-简答题
1、无限分类的数据表设计有哪些核心字段?
解答:核心字段:id,pid。
2、无限分类的本质是哪种数据结构?
解答:树,树的核心操作就是递归,所以无限分类一般都是递归。
3、无限分类一般是用哪种算法来实现的?
解答:递归,因为无限分类的本质是树,而树的核心算法就是递归,所以无限分类一般都是递归算法。当然栈也可以。
4、无限分类算法的起始是什么?
解答:依次找pid为0的数据。
5、无限分类递归算法实现中递归的参数是什么?
解答:数组数据和pid,如果数据表里面没有记录level字段,如果需要在递归中求level字段,参数可以加上level。
6、无限分类递归的排序算法是什么?
解答:依次找pid为0的数据,对每个pid为0的数据,递归找他们的所有孩子。
7、静态数组的作用是什么?
解答:保证数组数据独一份,即使在递归中也保证数组数据是全局的,是一份的。
8、php中的静态数组如何实现?
解答:static $arr=array();
9、如何实现foreach的逆序输出?
解答:用array_reverse(), foreach (array_reverse($sortModules) as $key => $value)。
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-10-30:27岁,宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672