半吊子出身,被一个会员系统绕晕了。
需求
排长培养出五个新班长,并且管理人数达到20名时,排长可荣升为连长。
连长培养出五个新排长,并且管理人数达到50名时,连长可荣升为营长。
营长培养出五个新营长,并且管理人数达到80名时,营长可荣升为团长。
以此类推,会员全部推荐加入
现在在某个人被邀请加入后,默认是班长,要从数据库中按推荐线查找所有上级是否满足升级条件,满足的调整级别。
用了/Zizaco/entrust的role做了级别,拿营长为例,我的思路是先筛选出了管理的人数在50-80之间的会员,然后循环查找这些会员的下级并统计这些下级的用户组,合并后放到一个数组,最后统计这个数组中营长用户组的个数是否达到了5个,如果达到5个并且当前用户的用户组是营长的就升级为团长。
问题
在循环查找下级的时候遇到问题,不清楚该如何合并每次循环得到的数组,把所有下级的用户组数量和直接下级合并成一个数组。
类似
array(
'张三' => 2, 张三有2个直接下级
'排长' => 3, 所有下级里排长有三个
’连长‘ =>4, 所有下级里连长有四个
)
public static function getchildroles($phone,$name)
{
//根据手机号查找第一层子元素
$children = User::where('tphone',$phone)->get();
if(!empty($children))
{
//获取第一层子元素数量
$childonenum = array($name => $children->count());
//循环第一层子元素
//$result = array();
foreach($children as $child)
{
//获得第一层子元素的用户组
$child_rolename = $child->roles->first()->name;
//echo $child_rolename;
//依次存入数组
$data[] = $child_rolename;
//获得一层子元素的手机号
$child_phone = $child->phone;
$child_name = $child->name;
$data = array_merge($childonenum, $data);
//$result = array_merge($result, $data);
self::getchildroles($child_phone,$child_name);
print_r($data);
}
//$data = array_merge($data, $data);
//print_r($result);
//return $result;
}
}