版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36602939/article/details/91068224
递归获取用户下线(不包括自己) 以及等级
【对此修改是:users表联表users表,自己联自己,为了把下级pid的昵称获取出来】
//递归获取用户下线(不包括自己) 以及等级
function getDownMemberIds2($uid,$need_all=false,$agent_level=1,$agent_level_limit=0){
global $g_down_ids;
if(!$uid){
return false;
}
if($uid||true){
$member_arr = Db::name('users')
->alias('u')
->join('users uu','u.pid = uu.id')
->field('u.id,u.pid,u.nickname,uu.nickname as up_nickname')
->where(['u.pid'=>$uid])
->limit(0,5000)
->select();
foreach($member_arr as $mb){
if($mb['id']&&$mb['id']!=$uid){
if($need_all){
$mb['agent_level'] = $agent_level;
$GLOBALS['g_down_ids'][]=$mb;
}else{
$GLOBALS['g_down_ids'][]=$mb['id'];
}
getDownMemberIds2($mb['id'],$need_all,$agent_level+1,$agent_level_limit);
}
}
}
return $g_down_ids;
}
新的团队列表controller:
public function myTeam(){
$userid = session('user.id');
// 当前用户的30级下线 返回等级
$team_list = getDownMemberIds2($userid,true,1,30);
$sort = array(
'direction' => 'SORT_ASC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
'field' => 'agent_level', //排序字段
);
$arrSort = array();
foreach($team_list AS $uniqid => $row){
foreach($row AS $key=>$value){
$arrSort[$key][$uniqid] = $value;
}
}
if($sort['direction']){
array_multisort($arrSort[$sort['field']], constant($sort['direction']), $team_list);
}
$this->assign('list', $team_list);
return $this->fetch('myTeamNew');
}
相比以前,用了三层foreach循环嵌套,极大拖慢加载速度。
现在只是对数组进行排序即可
优化前:
优化后: