经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
tp5递归 无限级分类详解
来源:jb51  时间:2019/10/18 14:01:43  对本文有异议

在TP5公共common.php文件里写

  1. <?php
  2. //计算某个类别所属的类别层数
  3. function getcatelayer($cateid,$flag=1){
  4. $cates = M('Gcategory');
  5. $ini['cate_id'] = $cateid;
  6. $arr = $cates->where($ini)->find();
  7. if($arr['parent_id']!=0){
  8. $flag = getcatelayer($arr['parent_id'],$flag+1);
  9. }
  10. return $flag;
  11. }
  12. //类别递归(单层)
  13. function getone($arr,$parent=0,$lev=0){
  14. //迭代
  15. $task=array($parent);//任务数组
  16. $tree=array();//结果数组
  17. while (!empty($task)){
  18. $flg=false;
  19. foreach ($arr as $k=>$v){
  20. if ($v['parent_id']==$parent) {
  21. $tree[]=array(
  22. 'id'=>$v['cate_id'],
  23. 'name'=>$v['cate_name'],
  24. 'lev'=>$lev
  25. );
  26. array_push($task, $v['cate_id']);
  27. $parent=$v['cate_id'];
  28. $lev=$lev+1;
  29. unset($arr[$k]);
  30. $flg=true;
  31. }
  32. }
  33. if ($flg==false) {
  34. array_pop($task);
  35. $parent=end($task);
  36. $lev=$lev-1;
  37. }
  38. }
  39. return $tree;
  40. }
  41. //类别递归(多层)
  42. function getCates($arr,$pid=0)
  43. {
  44. for($i=0; $i<count($arr); $i++){
  45. if($arr[$i]['parent_id']==$pid){
  46. $newArr[] = array(
  47. "id"=>$arr[$i]['cate_id'],
  48. "name"=>$arr[$i]['cate_name'],
  49. 'son'=>getCates($arr,$arr[$i]['cate_id']),
  50. );
  51. }
  52. }
  53. return $newArr;
  54. }
  55. //查询类别所属级
  56. function getlayer($cateid,$flg=1)
  57. {
  58. $gcg=M("Gcategory");
  59. $ini["cate_id"]=$cateid;
  60. $cateArr=$gcg->where($ini)->find();
  61. if($cateArr['parent_id']!=0)
  62. {
  63. $flg=getlayer($cateArr['parent_id'],$flg+1);
  64. }
  65. return $flg;
  66. }

一般只用其中的递归单层就可以了

控制器中

  1. <?php
  2. //分类管理
  3. namespace app\admin\Controller;
  4. use think\Db;
  5. use think\Controller;
  6. class CategoryController extends Controller
  7. {
  8. /**
  9. * 分类列表页(递归)
  10. */
  11. public function category_list()
  12. {
  13. header('content-type:text/html;charset=utf-8');
  14. $categoryArr=db::name('表名')->select();
  15. //调用递归函数
  16. $getall=getone($categoryArr);
  17. $this->assign("getall",$getall);
  18. return $this->fetch()
  19. }

视图 view中

  1. <div class="conShow">
  2. <table border="1" cellspacing="0" cellpadding="0">
  3. <tr>
  4. <td width="100px" class="tdColor tdC">id</td>
  5. <td width="150px" class="tdColor">汽车类型</td>
  6. <td width="180px" class="tdColor">操作</td>
  7. </tr>
  8. {foreach name="getall" id="v"}
  9. <tr>
  10. <td>{$v.id}</td>
  11. <td >{php}echo str_repeat(' ',$v['lev']*2){/php}|-{$v['name']}</td>
  12. <td><a href="connoisseuradd.html" rel="external nofollow" ><img class="operation"
  13. src="/img/admin/update.png"></a> <img class="operation delban"
  14. src="/img/admin/delete.png"></td>
  15. </tr>
  16. {/foreach}
  17. </table>
  18. <div class="paging">此处是分页</div>
  19. </div>

以上这篇tp5递归 无限级分类详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号