递归查询---当前分类的下的所有子分类

本文介绍了一种使用PHP实现的递归查询方法,用于获取数据库中指定分类的所有子分类。通过对原始递归函数进行改进,解决了多次查询时残留数据的问题。

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

既然是查找当前分类下的所有子分类,那么就是根据当前分类的id,去找所有pid等于当前的分类,然后通过递归不断的去找下一级
上代码:

    //执行函数
    public function getchildren(){
        //取出所有分类
        $data=M('ushop_class')->select();
        $res= $this->_getchildren($data,78);
        dump($res);
    }

    //递归数据
    public function _getchildren($data,$catid){
        static $res=array();
        foreach($data as $k=>$v){
            //判断该条数据的pid 是否等于当前 id
            if($v['pid']==$catid){
            //将该条数据保存在静态变量中
                $res[]=$v['name'];
                //继续将查询出的数据中id代入递归中继续操作
                $this->_getchildren($data,$v['id']);
            }
        }
        return $res;
    }

以上代码虽然能实现功能但是还是有个小bug 的
因为在static $res=array();是静态变量,所以在执行完一次后,结果将会保存在 $res中。当你在通过ajax不刷新的方式去查询的话,得到的结果就会包含上一次的数据所以做出以下改进

    //执行函数
    public function getchildren(){
        //取出所有分类
        $data=M('ushop_class')->select();
        //每次执行前将$extis设为true  函数就会清空$res
        $res= $this->_getchildren($data,78,true);
        dump($res);
    }

    //递归数据
    //$extis = false
    public function _getchildren($data,$catid,$extis=false){

        if($extis){
            $res=[];
        }
        static $res=array();
        foreach($data as $k=>$v){
            //判断该条数据的pid 是否等于当前 id
            if($v['pid']==$catid){
            //将该条数据保存在静态变量中
                $res[]=$v['name'];
                //继续将查询出的数据中id代入递归中继续操作
                $this->_getchildren($data,$v['id']);
            }
        }
        return $res;
    }

这下应该就没问题了,还请大神指点*_*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值