Я схожу с ума от этого.
Учитывая, что у меня есть 2 массива, например
$array1 = [
"data_to_merge" => ["2020-03-11 16:00:00", "2020-03-24 14:00:00"],
"data_to_merge_past_year" => ["2019-03-11 16:00:00"],
];
$array2 = [
"data_to_merge" => [],
"data_to_merge_past_year" => ["2018-03-11 14:00:00"],
];
Моя цель - получить результат вроде
all: [
"data_to_merge" => [
"2020-03-11 16:00:00",
"2020-03-24 14:00:00"
],
"data_to_merge_past_year" => [
"2018-03-11 14:00:00",
"2018-03-11 16:00:00",
],
],
Я пробовал просто с
$result = collect($array1)->merge(collect($array2));
Но при таком подходе он удалит значения из data_to_merge
из моего первого массива. Есть ли способ Laravel получить такой результат? Для демонстрации может быть больше двух массивов.
Вот мой полный пример, в основном тот же
$array1 = [
"host" => "blablubb",
"data_to_merge" => [
"2020-03-11 16:00:00",
"2020-03-24 14:00:00"
],
"data_to_merge_past_year" => [
"2019-03-11 16:00:00"
],
];
$array2 = [
"host" => "blablubb",
"data_to_merge" => [],
"data_to_merge_past_year" => [
"2018-03-11 16:00:00"
],
];
$array3 = [
"host" => "blablubb",
"data_to_merge" => [],
"data_to_merge_past_year" => [],
];
$array4 = [
"host" => "blablubb",
"data_to_merge" => [
"2020-03-04 14:00:00",
"2020-03-04 17:00:00"
],
"data_to_merge_past_year" => [],
];
$all = collect([$array1, $array2, $array3, $array4]);
$all
->groupBy('host')
->map(function ($item) {
if (count($item) > 1) {
$result = collect([]);
foreach ($item as $subItem) {
$result = $result->merge($subItem);
}
return $result;
}
return $item->first();
})
->values()
->toArray();
Спасибо, ребята!