我有这样的数组:
$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结合的技巧
非常感谢!
答案 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]