php实战之使用递归读取商品无限分类

本文详细介绍了如何在商城项目中,通过封装的方法将分类表中的数据按照pid关联,实现从二维数组转换为树状结构的过程。特别关注于在修改分类父级ID为原子分类时,如何避免丢失分类枝的问题。

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

最近在做一个商城项目时候,需要取出分类表中的数据,分类表中通过一个pid(父类id)关联各个分类,为了整理读出的二维数据成一个树状的格式,自己在项目中封装了下面一个方法。

/**
 * [treeCats description]
 * @param  [array]  $arr   [原始未排序的数组]
 * @param  [array]  $limit [第一个元素代表开始递归的parent_id,默认为0,第二个元素代表剔除元素及子元素cat_id,如果没有传值,默认为0]
 * @param  integer $level [函数调用的深度]
 * @return [array]         [排好序的数组]
 */
    public function treeCats($arr,$limit,$level=0){
        $rec = array();
            //先消除cat_id对应的值
        foreach ($arr as $key=>$value){
            if($value['cat_id']!=$limit['cd']){
                $arr_new [$key]=$value;
            }

        }
        //对于新数组进行遍历
        foreach ($arr_new as $key => $value) {
        if($value['parent_id']==$limit["pd"] &&$value['parent_id']!=$limit["cd"]){
                $value['level']=$level;
                $rec []= $value;
                //生成用于下一层循环的数组
                $next_limit = array("pd"=>$value['cat_id'],"cd"=>$limit["cd"]);

                $rec = array_merge($rec,$this->treeCats($arr,$next_limit,$level+1));
            }
        }       
        return $rec;
    }

这里设置$limit 的应用场景是如果修改这个分类的父分类为它原来的子分类的话,这个分类枝就发生丢失了,所以这时候就应该将可选类里面剔除它的子类。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值