php---遞歸獲取最上級和所有子級

在做PHP開發的過程中,經常會需要獲取最上級或所有子級的應用場景:

一、獲取最頂級

$list = [
    ['id'=>1,'pid'=>0,'name'=>'張飛'],
    ['id'=>2,'pid'=>1,'name'=>'張苞'],
    ['id'=>3,'pid'=>2,'name'=>'張遵'],
    ['id'=>4,'pid'=>3,'name'=>'張三'],
    ['id'=>5,'pid'=>3,'name'=>'張四'],
];

$parent = getParent($list,5);
var_dump($parent);
function getParent($list,$id){
    foreach($list as $item) if($id == $item['id']) $citem = $item; // 當前
    if(!$citem['pid']) return $citem; // 它沒有上級,則它本身就是最上級 
    return getParent($list,$citem['pid']);
}

二、獲取所有子級

$list = [
    ['id'=>1,'pid'=>0,'name'=>'張飛'],
    ['id'=>2,'pid'=>1,'name'=>'張苞'],
    ['id'=>3,'pid'=>2,'name'=>'張遵'],
    ['id'=>4,'pid'=>3,'name'=>'張三'],
    ['id'=>5,'pid'=>3,'name'=>'張四'],
];
$childs = getChilds($list,1);
var_dump($childs);
var_dump(array_column($childs,'id'));
function getChilds($list,$id){
    $childs = [];
    foreach($list as $item){
        if($id == $item['pid']){
            $childs[] = $item;
            $childs = array_merge($childs,getChilds($list,$item['id']));
        }
    }
    return $childs;
}

打完收工!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章