laravel :递归方法(总)

这篇博客介绍了如何在Laravel框架中使用递归方法处理父子级分类数据,包括视图中的递归展示和通过PID实现无限级分类的方法。示例代码展示了如何从数据库获取数据并进行递归处理,以便在HTML页面上以多级菜单的形式展示分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//laravel 框架

//->toArray(); json 转为array形式

//////////控制器中//////////

父级和子集不在同一张数据表

$data = DB::table('父级分类的表名')->get()->toArray(); //一级分类

        foreach($data as $k=>$v){

            $data[$k]->son = DB::table('子集分类的表名')->where(['子集和父级关联的字段'=>$v->id])->get()->toArray(); //二级分类

        }

return view(html存放的文件夹名.文件名',['nav' => 1,'classCat' => $classCat]);

 

 

/*********************html页面*********************/

 @foreach($classCat as $cat)

                    <ul>

                        <li>

                            @foreach($cat->son as $v)

                                @if(empty($v->son))

                                    <a href="{{url('teaching?cat_id='.$cat->id.'&school_id='.$v->id)}}">{{$v->name}}</a>

                                @endif

                            @endforeach

                        </li>

                    </ul>

                    @endforeach

 

 

 

 

/******************************递归******************************/

/**

     * 视图形递归

     * @param $list

     * @param int $pid

     * @param int $level

     * @param string $html

     * @return array

     */

     public static function tree(&$list,$pid=0,$level=0,$html='      '){

        static $tree = array();

        foreach($list as $v){

            if($v['pid'] == $pid){

                $v['sort'] = $level;

                $v['html'] = str_repeat($html,$level);

                $tree[] = $v;

                self::tree($list,$v['id'],$level+1);

            }

        }

        return $tree;

    }

 

//多级递归

  static function findSon($data,$pid){

         $childs = [];

          foreach($data as $v){

             if($v['pid']==$pid){

                 //$arr[] = $v;

                  $childs[] = $v;

             }

          }

          return $childs;

      }

 

 

      static function getSon($data,$pid){

       $childs = self::findSon($data,$pid);

       if(!$childs) return null;

       foreach($childs as $k=>$v){

          $res =  self::getSon($data,$v['id']);

          if($res!='')$childs[$k]['son'] = $res;

       }




/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*****根据pid 实现的无限级分类*****/

/*

*$pid 父级的id

*$result 默认的参数

* $spac 前面的空格数量

*

*/

function getList (pid = 0,&$result = array(),$spac = 0){

         $spac = $spac+4;

        $row =  "select * from 表名 where pid = $pid"; //查询分类

         foreach($row ){

                   $row['字段名'] = str_repeat('&ndsp;').‘|--’.$rew['字段名'],

                   $result[] = $row;

                   getList($row['id'],$result,$spac);

          }

         return  $result;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值