总和值数组PHP

时间:2019-01-15 04:18:32

标签: php arrays sum

我有这样的数组:

$array = array(1, 4, 8, 3, 7);

我想对数组的值求和,但首先,我像这样取消移动数组:

<?php

$array = array(1, 4, 8, 3, 7);

array_unshift($array, 0);
array_pop($array);

foreach($array as $key => $val) {
   echo $val;
}

?>

然后我要先将求和数组(1, 4, 8, 3, 7)与新数组(0, 1, 4, 8, 3)相加 总和如1加0和4加1和8加4等

我想要的输出是:1, 5, 12, 11, 10

任何使它与PHP结合的技巧

非常感谢!

4 个答案:

答案 0 :(得分:3)

只需使用array_map。 array_map允许您同时在多个数组上使用自定义函数

(^|[^G](G{2})+)(x)

结果类似

$array = array(1, 4, 8, 3, 7);

$others = $array;
array_unshift($others, 0);
array_pop($others);

function sumarray($v1,$v2){
    return $v1+$v2;
}

$res = array_map('sumarray', $array,$others);
print_r($res);

答案 1 :(得分:1)

您可以使用for循环代替foreach。

示例

$array = $array2 = array(1, 4, 8, 3, 7);

array_unshift($array, 0);
array_pop($array);

$array3 = [];
for($i = 0; $i < count($array); $i++) {
  $array3[] = $array[$i]+$array2[$i];
}

print_r($array3);

输出

Array
(
    [0] => 1
    [1] => 5
    [2] => 12
    [3] => 11
    [4] => 10
)

答案 2 :(得分:0)

您可以将弹出的值存储在变量(popped)中,以便以后使用。然后,您可以使用常规的for循环遍历数组,并在循环完成后将popped值添加到数组:

$array = array(1, 4, 8, 3, 7);

array_unshift($array, 0);
$popped = array_pop($array);

$result = [];
for($i = 0; $i < count($array)-1; $i++) {
    $val1 = $array[$i];
    $val2 = $array[$i + 1];

    $result[] =  $val1 + $val2;
}

$result[] = end($array) + $popped; // add the last element with the popped value
print_r($result);

输出:

Array ( [0] => 1 [1] => 5 [2] => 12 [3] => 11 [4] => 10 )

答案 3 :(得分:0)

无需弹出或移动任何元素,也无需创建输入数组的副本。

在迭代输入数组时,将当前值与前一个值相加。如果没有以前的值,请使用零。这非常简单,因为您的输入是一个索引数组。

代码:(Demo)

$array = [1, 4, 8, 3, 7];

$result = [];
foreach ($array as $index => $value) {
    $result[] = $value + ($array[$index - 1] ?? 0);
}

var_export($result);
// [1, 5, 12, 11, 10]