Объединить массив с таким же ключом

I have following 2 arrays:

$arr1 = [
   0 => [
      'id' => 1,
      'name' => 'Peter',
   ],
   1 => [
      'id' => 2,
      'name' => 'John',
   ]
]

$arr2 = [
   0 => [
      'id' => 1,
      'surname' => 'Newman',
   ],
   1 => [
      'id' => 2,
      'surname' => 'Cena',
   ]
]

Я хочу объединить эти массивы, ссылающиеся на один и тот же ключ. В этом случае я хотел бы объединить их там, где совпадает id. Итак, результат, которого я ожидал, будет:

$finalArr = [
       0 => [
          'id' => 1,
          'name' => 'Peter',
          'surname' => 'Newman',
       ],
       1 => [
          'id' => 2,
          'name' => 'John',
          'surname' => 'Cena',
       ]
    ]

Я использую laravel, но язык не должен иметь большого значения. Я бы хотел по возможности использовать collections.

где коды?

Kevin 27.06.2018 09:34

@Ghost Ага, ты прав, моя плохая, я написал «с», а не «где»! Просто привычка, 80% вопросов о php и array, которые я видел, дублируются, поэтому ...: x

Mickaël Leger 27.06.2018 09:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
80
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуй это:

foreach ($arr2 as $key2 => $value2) {
    foreach ($arr1 as $key1 => $value1) {
        if ($value2['id'] == $value1['id']){
            $arr1[$key1] = array(
                'id' =>  $value1['id'],
                'name' => $value1['name'],
                'surname' => $value2['surname']
            );
        }
    }
}
$arr1 = [
  0 => [
    'id' => 1,
    'name' => 'Peter',
  ],
  1 => [
    'id' => 2,
    'name' => 'John',
  ]
];

$arr2 = [
  0 => [
    'id' => 1,
    'surname' => 'Newman',
  ],
  1 => [
    'id' => 2,
    'surname' => 'Cena',
  ]
];

// First, I create a new array
$new_array = array();

// Now I loop throught first array and merge each array by key
foreach ($arr1 as $key => $value) {
    // If I just check if second array has the key so you can merge both
    // If you are 100% sure that both array has same key, no need to use isset()
    if (isset($arr2[$key])) {
        $new_array[$key] = array_merge($arr1[$key], $arr2[$key]);
    }
}

var_dump($new_array);

Выход:

array (size=2)
  0 => 
    array (size=3)
      'id' => int 1
      'name' => string 'Peter' (length=5)
      'surname' => string 'Newman' (length=6)
  1 => 
    array (size=3)
      'id' => int 2
      'name' => string 'John' (length=4)
      'surname' => string 'Cena' (length=4)
Ответ принят как подходящий

Вы можете использовать array_map и array_merge и проверить, совпадают ли ключи:

$finalArr = array_map(function($x) use ($arr2) {
    foreach($arr2 as $b) {
        if ($x["id"] === $b["id"]) {
            return array_merge($x, $b);
        }
    }
    return $x;
}, $arr1);

var_dump($finalArr);

Демо

Также благодарю за демонстрацию (:

Epsilon47 27.06.2018 12:52

Другие вопросы по теме