php - 在PHP中查找多维数组的总和
问题描述
我怎么能做到这一点,我是 PHP 新手并且卡住了。请帮忙,我知道这不是一个问这类问题的平台,但由于对 PHP 的了解较少,所以仍然在问。
我有以下数组,我想做相同日期和相同键的值的总和。
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
)
)
预期输出:
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
)
)
解决方案
您可以使用array_reduce
它来完成它:
$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);
推荐阅读
- conda - 默认情况下,在主目录而不是 /opt/miniconda3 中创建 Conda 环境
- c# - 如何将嵌入式图像与后面 C# 代码中的字符串指定的变量 ImageSource 绑定?
- c - 为什么我的转换说明符在 C 中不能正常工作
- vue.js - 每当页面重新加载时,AOS 和 NUXT JS 中的动画块往往会消失
- nginx - Nginx 用作反向代理时删除 ansi 转义码
- javascript - 正则表达式与预期的 \n 字符不匹配
- r - R:使用“doparallel”、“foreach”和“purrr”库重写循环
- ant - 如何使用 Apache Ant 从不同模块收集文件夹(带有文件),避免使用前导文件夹
- javascript - 反应:当我用后增量更改变量的状态时,程序中的值不同
- reactjs - 将图像上传到firebase存储然后再次将其传输到firestore后等待url数组