How can I achieve this, I am new in PHP and stuck. please help, I know this is not a platform for asking this kind of question, but still asking because of less knowledge about PHP.
I have the following array and I want to do the sum of value which is on the same date and same key.
Question Array:
Array
(
[0] => Array
(
[period] => 2019-02-01
[Campaign 1] => 70
[Campaign 4] => 0
[Campaign 3] => 0
)
[1] => Array
(
[period] => 2019-02-25
[Campaign 1] => 0
[Campaign 4] => 30
[Campaign 3] => 0
)
[2] => Array
(
[period] => 2019-02-25
[Campaign 1] => 50
[Campaign 4] => 0
[Campaign 3] => 0
)
[3] => Array
(
[period] => 2019-02-26
[Campaign 1] => 50
[Campaign 4] => 0
[Campaign 3] => 0
)
[4] => Array
(
[period] => 2019-02-26
[Campaign 1] => 0
[Campaign 4] => 45
[Campaign 3] => 0
)
[5] => Array
(
[period] => 2019-02-27
[Campaign 1] => 0
[Campaign 4] => 240
[Campaign 3] => 0
)
[6] => Array
(
[period] => 2019-02-27
[Campaign 1] => 430
[Campaign 4] => 0
[Campaign 3] => 0
)
)
Expected Output:
Array
(
[0] => Array
(
[period] => 2019-02-01
[Campaign 1] => 70
[Campaign 4] => 0
[Campaign 3] => 0
)
[1] => Array
(
[period] => 2019-02-25
[Campaign 1] => 50
[Campaign 4] => 30
[Campaign 3] => 0
)
[2] => Array
(
[period] => 2019-02-26
[Campaign 1] => 50
[Campaign 4] => 45
[Campaign 3] => 0
)
[3] => Array
(
[period] => 2019-02-27
[Campaign 1] => 430
[Campaign 4] => 240
[Campaign 3] => 0
)
)
You can use array_reduce
to accomplish it:
$array = array_reduce($array, function ($carry, $item) {
if (!isset($carry[$item['period']])) {
$carry[$item['period']] = $item;
}
else {
$period = $item['period'];
unset($item['period']);
foreach ($item as $campaign => $value) {
$carry[$period][$campaign] += $value;
}
}
return $carry;
}, []);
$array = array_values($array);
var_dump($array);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.