Объект выталкивается в массив, а затем вынимается случайным образом - PullRequest
0 голосов
/ 05 сентября 2018
$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.

При отладке я напечатал массив после нажатия, и он выдался нормально, но когда дело доходит до следующего пользователя, предыдущие пользователи ушли. Так что его подтолкнули, но потом сняли.

1 Ответ

0 голосов
/ 05 сентября 2018

Если я правильно понимаю, вы должны использовать ссылки:

foreach($groups as $group) -> foreach($groups as &$group)

$users = $group['users']; -> $users = &$group['users'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...