这是我关于StackOverflow的第一篇文章。
我正在寻找获取两个数组的最佳方法,每个数组具有不同数量的数据项,将它们合并,但是将其中一个键具有相同值的项加在一起(使用PHP)。
输入数组:
$array1 = array (
0 => array ( 'result_date' => '2020-07-20', 'total_for_day' => '75', ),
1 => array ( 'result_date' => '2020-07-21', 'total_for_day' => '17', ),
2 => array ( 'result_date' => '2020-07-22', 'total_for_day' => '0', ),
3 => array ( 'result_date' => '2020-07-23', 'total_for_day' => '6', ),
4 => array ( 'result_date' => '2020-07-24', 'total_for_day' => '1', )
);
$array2 = array (
0 => array ( 'result_date' => '2020-07-01', 'total_for_day' => '6264', ),
1 => array ( 'result_date' => '2020-07-02', 'total_for_day' => '7008', ),
2 => array ( 'result_date' => '2020-07-20', 'total_for_day' => '1968', ),
3 => array ( 'result_date' => '2020-07-21', 'total_for_day' => '7776', ),
);
所需的输出:
array (
0 => array ( 'result_date' => '2020-07-01', 'total_for_day' => '6264', ),
1 => array ( 'result_date' => '2020-07-02', 'total_for_day' => '7008', ),
2 => array ( 'result_date' => '2020-07-20', 'total_for_day' => '2043', ),
3 => array ( 'result_date' => '2020-07-21', 'total_for_day' => '7793', ),
4 => array ( 'result_date' => '2020-07-22', 'total_for_day' => '0', ),
5 => array ( 'result_date' => '2020-07-23', 'total_for_day' => '6', ),
6 => array ( 'result_date' => '2020-07-24', 'total_for_day' => '1', )
);
因此,基本上只是将两个数组合并为一个更大的数组,但是将“ result_date”匹配的“ total_for_day”加起来。请注意,在所需的输出中,它也由“ result_date” ASC进行排序。
预先感谢:-)
答案 0 :(得分:0)
我只是采用简单的方法,并使用中间数组映射:
$array1 = array(...);
$array2 = array(...);
$arrayN = array(...);
$merged = array();
foreach (array_merge($array1, $array2, $arrayN) as $record) {
$date = $record["result_date"];
if (!isset($merged[$date])) {
$merged[$date] = 0;
}
$merged[$date] += $record["total_for_day"];
}
$result = array();
foreach ($merged as $date => $days) {
$result[] = array(
"result_date" => $date,
"total_for_day" => "{$days}" // Remove the quotes if you don't want a string.
);
}
usort($result, function ($a, $b) {
return $a["result_date"] <=> $b["result_date"];
});
var_dump($result);