在做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; }
打完收工!