как два поля массива, каждый из которых внутри ключа объекта соответствует ему Cross? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть два массива пользователя и игра

$user =[
       {
           "name": "jone",
           "id": "100"
       },
       {
           "name": "Peters",
           "id": "200"
       }
   ]

$game = [
       {
           "name": "tennis",
           "level": "05",
           "user_id": "100"
       },
       {
           "name": "football",
           "level": "03",
           "user_id": "100"
       },
       {
           "name": "football",
           "level": "05",
           "user_id": "200"
       }
   ]

Я хочу получить такой результат, используя PHP / Laravel

$user = [
          {
              "name": "jone",
              "id": "100"
              "game": [
                  {
                      "name": "tennis",
                      "level": "05",
                      "user_id": "100"
                  },
                  {
                      "name": "football",
                      "level": "03",
                      "user_id": "100"
                  }
              ],
          },
          {
              "name": "Peters",
              "id": "200"
              "game": [
                  {
                      "name": "football",
                      "level": "05",
                      "user_id": "200"
                  }
              ],
          }
      ],   

любой поможет мне

1 Ответ

1 голос
/ 02 октября 2019

Я понимаю, что не должен давать ответ на этот "не вопрос". Я все еще делаю это, так как думаю, что это может иметь определенную ценность для обучения.

Идея состоит в том, чтобы не циклически повторять каждую игру для каждого пользователя (как наивный подход), как этопросто не масштабируется. Гораздо лучше использовать соответствующий массив и затем отсортировать игры в него:

//Prepare matching array
$user_games=array();
foreach ($user as $u) {
        $u['game']=array();
        $user_games[$u['id']]=$u;
}

//Sort games into matching array
foreach ($game as $g) {
        $user_games[$g['user_id']]['game'][]=$g;
}

Таким образом, новая игра не будет создавать n циклов (n - количество пользователей), а только один.

print_r($user_games);

создает желаемый вывод. Если идентификаторы пользователей как индексы являются проблемой, просто используйте

print_r(array_values($user_games);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...