因項目需要需要統計用戶無限下級計算分銷佣金,計算每月分紅,計算無限下級團隊的業績,需要先獲得某個會員的無限下級成員。先看看數據庫中的member表字段
//1.整個會員表的數據 $member = array( array('id'=>1, 'pid'=>0, 'nickname' => 'A'), array('id'=>2, 'pid'=>1, 'nickname' => 'B'), array('id'=>3, 'pid'=>1, 'nickname' => 'C'), array('id'=>4, 'pid'=>8, 'nickname' => 'D'), array('id'=>5, 'pid'=>3, 'nickname' => 'E'), array('id'=>6, 'pid'=>3, 'nickname' => 'F'), array('id'=>7, 'pid'=>3, 'nickname' => 'G'), array('id'=>8, 'pid'=>8, 'nickname' => 'H') ); /* *2.獲取某個會員的無限下級方法 非遞歸方法 *$members是所有會員數據表,$mid是用戶的id */ function GetTeamMember($members, $mid) { $Teams=array();//最終結果 $mids=array($mid);//第一次執行時候的用戶id do { $othermids=array(); $state=false; foreach ($mids as $valueone) { foreach ($members as $key => $valuetwo) { if($valuetwo['pid']==$valueone){ $Teams[]=$valuetwo[id];//找到我的下級立即添加到最終結果中 $othermids[]=$valuetwo['id'];//將我的下級id保存起來用來下輪循環他的下級 array_splice($members,$key,1);//從所有會員中刪除他 $state=true; } } } $mids=$othermids;//foreach中找到的我的下級集合,用來下次循環 } while ($state==true); return $Teams; }
$res=GetTeamMember($member ,1); var_dump($res);
遞歸方法
//獲取用戶的所有下級ID function get_downline($members,$mid,$level=0){ $arr=array(); foreach ($data as $key => $v) { if($v['pid']==$mid){ //pid為0的是頂級分類 $v['level'] = $level+1; $arr[]=$v; $arr = array_merge($arr,get_downline($data,$v['id'],$level+1)); } } return $arr; }