我有两个数组。它们的长度始终相同。如果第一个数组元素值相同,则计算第二个数组元素值之和。
示例
$array1 = array(1,2,2,3);
$array2 = array(10,20,30,50);
// I can get the sum of array1 and array2 output.
$array_sum1 = array(10,50,50);
$array3 = array(4,4,4,6);
$array4 = array(10,20,30,50);
// I can get the sum of array3 and array4 output.
$array_sum2 = array(60,50);
我该如何实现这一目标?
您可以将 array_sum 与 array_map 一起使用,如下所示,
$array1 = [1, 2, 2, 3];
$array2 = [10, 20, 30, 50];
$array_sum1 = [];
foreach ($array1 as $key => $value) {
$array_sum1[$value][] = $array2[$key];
}
$array_sum1 = array_map("array_sum", $array_sum1);
print_r($array_sum1);
$array3 = [4, 4, 4, 6];
$array4 = [10, 20, 30, 50];
$array_sum2 = [];
foreach ($array3 as $key => $value) {
$array_sum2[$value][] = $array4[$key];
}
$array_sum2 = array_map("array_sum", $array_sum2);
print_r($array_sum2);die;
输出:-
Array
(
[1] => 10
[2] => 50
[3] => 50
)
Array
(
[4] => 60
[6] => 50
)
对数据执行两次迭代以进行分组和求和是间接的。
使用“id”值作为输出数组中的键。如果第一次遇到给定的“id”,则将“val”值保存到“id”中;第一次遇到后,将“val”添加到“id”中。
代码:(演示)
$ids = [1, 2, 2, 3];
$vals = [10, 20, 30, 50];
foreach ($ids as $index => $id) {
$result[$id] = ($result[$id] ?? 0) + $vals[$index];
}
var_export($result);
输出:
array (
1 => 10,
2 => 50,
3 => 50,
)
以下是类似(几乎重复)的答案: