php无限查询下级,php递归统计下级总数,php 获取无限子级


因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的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;
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM