对两个长度相等的平面数组的映射值进行分组和求和

问题描述 投票:0回答:2

我有两个数组。它们的长度始终相同。如果第一个数组元素值相同,则计算第二个数组元素值之和。

示例

$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);

我该如何实现这一目标?

php arrays multidimensional-array sum grouping
2个回答
2
投票

您可以将 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
)

1
投票

对数据执行两次迭代以进行分组和求和是间接的。

使用“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,
)

以下是类似(几乎重复)的答案:

© www.soinside.com 2019 - 2024. All rights reserved.