php递归获取所有父、子级ID数据

递归获取所有的子分类的ID

$data = [
    
    ['id' => '1', 'pid' => '0', 'dsp' => '1'],
    
    ['id' => '2', 'pid' => '0', 'dsp' => '2'],
    
    ['id' => '3', 'pid' => '0', 'dsp' => '3'],
    
    ['id' => '4', 'pid' => '1', 'dsp' => '1-4'],
    
    ['id' => '5', 'pid' => '4', 'dsp' => '1-4-5'],
    
    ['id' => '6', 'pid' => '5', 'dsp' => '1-4-5-6'],
    
    ['id' => '7', 'pid' => '3', 'dsp' => '3-7'],
    
    ['id' => '8', 'pid' => '2', 'dsp' => '2-8'],
    
    ['id' => '9', 'pid' => '1', 'dsp' => '1-9'],
    
    ['id' => '10', 'pid' => '4', 'dsp' => '1-4-10'],
    
    ['id' => '11', 'pid' => '4', 'dsp' => '1-4-10'],
    
];

function getAllChild($array,$id){
    $arr = array();
    foreach($array as $v){
        if($v['pid'] == $id){
            $arr[] = $v['id'];
            $arr = array_merge($arr,getAllChild($array,$v['id']));
        };
    };
    return $arr;
}

$res  = getAllChild($data,'4');
var_dump($res);


//方法二
function recursion($data, $pid = 0)

{
    
    static $child = []; // 定义存储子级数据数组
    
    foreach ($data as $key => $value) {
        
        if ($value['pid'] == $pid) {
            
            $child[] = $value; // 满足条件的数据添加进child数组
            
            unset($data[$key]); // 使用过后可以销毁
            
            recursion($data, $value['id']); // 递归调用,查找当前数据的子级
            
        }
       
    }
    
    return $child;
    
}

输出结果

array (size=4)
  0 => string '5' (length=1)
  1 => string '6' (length=1)
  2 => string '10' (length=2)
  3 => string '11' (length=2)

递归获取父级数据ID

function get_top_parentid($cate,$id){
    $arr=array();
    foreach($cate as $v){
        if($v['id']==$id){
            $arr[]=$v['id'];    // $arr[$v['id']]=$v['name'];
            $arr=array_merge($arr,get_top_parentid($cate,$v['pid']));
        }
    }
    return $arr;
}

$res  = get_top_parentid($data,'4');
var_dump($res);

输出结果

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值