Задать вопрос
the_lord_of_the_king
@the_lord_of_the_king

Как объединить массив с массивами по ключу?

62595776973ac760437105.png
625957b11102c769751511.png
Как объединить два массива с массивами, чтобы в результате получился третий массив? Объединить по ключу "product".
$array = [
            0 => [
                'product' => 'Мирт в стеклянном цилиндре',
                'local_link' => 'localhost/catalog/mirt-v-steklyannom-tsilindre',
                'remote_link' => '/item/mirt-v-steklyannom-tsilindre'
            ],
            1 => [
                'product' => 'Панно прозрачное с синим Лимониумом',
                'local_link' => 'localhost/catalog/panno-prozrachnoe-s-sinim-limoniumom',
                'remote_link' => '/item/panno-prozrachnoe-s-sinim-limoniumom'
            ]
        ];
  • Вопрос задан
  • 82 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$localKeys = array_column($arr1, 'product');
$remoteKeys = array_column($arr2, 'product');
$totalKeys = array_values(array_unique(array_merge($localKeys, $remoteKeys)));

$localLinks = array_combine(
    $localKeys,
    array_column($arr1, 'local_link')
);
$remoteLinks = array_combine(
    $remoteKeys,
    array_columns($arr2, 'remote_link')
);

$result = array_map(
    fn($key) => [
        'product' => $key,
        'local_link' => $localLinks[$key] ?? null,
        'remote_link' => $remoteLinks[$key] ?? null
    ]
);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@microbot
Получился не очень оптимальный код и, возможно, он похож на Ваш
$test = $collect
  ->groupBy('product')->map(function ($item) {
    return $item[0];
  })->toArray();

$test_2 = $collect_2
  ->groupBy('product')->map(function ($item) {
    return $item[0];
  })->toArray();

foreach ($test as $key => $item) {
  $test_3[$key] = array_merge($test[$key] ?? [], $test_2[$key] ?? []);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы