【问题标题】:Two same length array into find sum of value second array element value for first array element value wise in php两个相同长度的数组在php中查找第一个数组元素值的第二个数组元素值的总和
【发布时间】:2020-05-08 06:26:41
【问题描述】:

我有两个数组。它们总是相同的长度。如果第一个数组元素值相同,则为第二个数组元素值之和。

示例

$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 laravel multidimensional-array sum


【解决方案1】:

您可以使用 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;

Demo

输出:-

Array
(
    [1] => 10
    [2] => 50
    [3] => 50
)
Array
(
    [4] => 60
    [6] => 50
)

【讨论】:

【解决方案2】:

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

使用“id”值作为输出数组中的键。如果第一次遇到给定的“id”,则将“val”值保存到“id”;在第一次遇到之后,将“val”添加到“id”。

代码:(Demo)

$ids = [1, 2, 2, 3];
$vals = [10, 20, 30, 50];

foreach ($ids as $index => $id) {
    if (!isset($result[$id])) {
        $result[$id] = $vals[$index];
    } else {
        $result[$id] += $vals[$index];
    }
}
var_export($result);

输出:

array (
  1 => 10,
  2 => 50,
  3 => 50,
)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2021-12-05
    • 2015-05-23
    • 2022-11-16
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多