$groups = [];
foreach($data as $user)
{
$userGroupId = $user['GroupId'];
$exists = false;
foreach($groups as $group)
{
$groupId = $group['GroupId'];
if ($groupId == $userGroupId)
{
$users = $group['users'];
$currentUser = array(
'UserId'=>$user['UserId'],
'UserName'=>$user['UserName'],
'Surname'=>$user['Surname']
);
array_push($users, $currentUser);
$exists = true;
break;
}
}
if (!$exists)
{
$addGroup = array(
'GroupId'=>$user['GroupId'],
'GroupName'=>$user['GroupName'],
'users'=>[array(
'UserId'=>$user['UserId'],
'UserName'=>$user['UserName'],
'Surname'=>$user['Surname']
)]
);
array_push($groups, $addGroup);
}
}
所以我有一个名为groups的空数组。
原始数据是一个由不同用户组成的数组,包括他们所在的组,我正在尝试将其排序为一组内部包含用户数组的组。
一切正常,除非我试图将当前用户推送到users数组。
在调试时我已经在推送后打印了数组并且它已经推得很好但是当它涉及到下一个用户时,之前的用户已经消失了。所以它推了推,但后来把它拿出来了。
如果我找对你,你应该使用引用:
foreach($groups as $group) -> foreach($groups as &$group)
$users = $group['users']; -> $users = &$group['users'];