Simple code like this:
JavaScript
x
$array = [
[11 => 771725],
[11 => 847226],
[10 => 410035],
[11 => 455387],
];
dd($array);
output:
The result in OCTOBER (10) there is 1 price:
JavaScript
["410035"]
while in NOVEMBER (11) there are 3 prices:
JavaScript
["771725", "847226", "455387"]
and at DECEMBER (12) is none
I need logic to calculate all prices in months 10, 11, and 12. The expected output is
JavaScript
[
10 => "2074338",
11 => "410035",
12 => "0"
]
Thanks 🙂
Advertisement
Answer
I used Collection and end up with the correct results. This could be achieve in a number of ways:
APPROACH 1:
JavaScript
collect($array)
->groupBy(function ($item) {
return collect($item)->keys()->first();
})
->map(function ($items) {
return collect($items)->flatten()->sum();
});
APPROACH 2:
JavaScript
collect($array)
->groupBy(function ($item) {
return array_key_first($item);
})
->map(function ($items) {
return collect($items)->flatten()->sum();
});
APPROACH 3:
JavaScript
$default = [
1 => 0,
2 => 0,
3 => 0,
4 => 0,
5 => 0,
6 => 0,
7 => 0,
8 => 0,
9 => 0,
10 => 0,
11 => 0,
12 => 0,
];
collect($array)
->reduce(function ($carry, $item) {
$month = array_key_first($item);
$carry[$month] += $item[$month];
return $carry;
}, $default);