php 从元素值加上前一个元素的值生成新的数组值

dnph8jn4  于 2023-10-15  发布在  PHP
关注(0)|答案(4)|浏览(95)

我有这样的数组:

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

我想对数组的值求和,但首先,我像这样对数组进行unshift:

<?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

mm9b1k5b

mm9b1k5b1#

使用array_map。array_map允许您同时对多个数组使用自定义函数

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

结果类似

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

uxhixvfz2#

你可以使用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
)
vxqlmq5t

vxqlmq5t3#

可以将弹出的值存储在变量(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 )
m3eecexj

m3eecexj4#

不需要弹出或移动任何元素,也不需要创建输入数组的副本。
当您重新计算输入数组时,将当前值与前一个值相加。如果没有前一个值,则使用零。这是非常简单的,因为你的输入是一个索引数组。
代码:(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]

等效功能样式:(Demo

var_export(
    array_map(
        function($v) {
            static $last = 0;
            $new = $v + $last;
            $last = $v;
            return $new;
        },
        $array
    )
);

相关问题