Php 将最后一个值与数组中以前的所有值求和

Php 将最后一个值与数组中以前的所有值求和,php,arrays,Php,Arrays,我有一个包含一些值的数组,我需要将其转换为新数组,并将每个值与所有以前的值相加。例如(数组长度、键和值总是不同),这就是我所拥有的: Array ( [0] => 1 [1] => 1 [2] => 5 [3] => 1 [4] => 1 [7] => 1 [8] => 3 [9] => 1 ) 这就是我需要的: Array ( [0] => 1 [1] =&g

我有一个包含一些值的数组,我需要将其转换为新数组,并将每个值与所有以前的值相加。例如(数组长度、键和值总是不同),这就是我所拥有的:

Array
(
    [0] => 1
    [1] => 1
    [2] => 5
    [3] => 1
    [4] => 1
    [7] => 1
    [8] => 3
    [9] => 1
)
这就是我需要的:

Array
(
    [0] => 1
    [1] => 2
    [2] => 7
    [3] => 8
    [4] => 9
    [7] => 10
    [8] => 13
    [9] => 14
)
我尝试了很多不同的方法,但总是坚持做某件事,或者意识到我在某个地方错了。我有一种感觉,我试图在这里重新发明一个轮子,因为我认为必须有一些简单的函数来实现它,但没有找到解决方案的运气。这是我最后一次尝试:

$array = array( "0"=> 1, "1"=> 1, "2"=> 5, "3"=> 1, "4"=> 1, "7"=> 1, "8"=> 3, "9"=> 1 );
$this = current($array);
$next = next($array);
$end = next(end($array));
$sum = 0;
$newArray = array();

foreach ($array as $val){
    if($val != $end){
        $sum = ($this += $next);
        array_push($newArray, $sum);
    }
}

print_r($newArray);

不幸的是,我又错了。我花了很多时间想办法不去我想去的地方,有人能把我踢向正确的方向吗?

建议你使用
array\u slice()
&
array\u sum()

参考:


您只需检查数组和并将其添加到新数组中(以一种简单的方式):


你太复杂了。循环遍历数组的所有元素,并将当前元素添加到总和。然后将该和分配给新数组

$sums = array_reduce($array, function (array $sums, $num) {
    return array_merge($sums, [end($sums) + $num]);
}, []);
确保索引正确

    for($i=1;$i<sizeof($a);$i++)
    {
        $a[$i]=$a[$i]+$a[$i-1];
    }

换句话说,它在数组(
array\u reduce
)上进行迭代,并在每次迭代中向新数组(
array\u merge
)追加一个数字(
$sums
),该数字是数组中前一项(
end($sums)
)和当前数字的总和。使用PHP5.4+数组语法(
[]
)。

假设数组变量为$a; 您可以使用简单for循环


对于($i=1;$i)您正在为值反复计算数组和切片,您可以从上一次计算中知道总和…无需切片和数组和…这将无需花费内存和cpu…谢谢!这正是我需要的,我使用这些(非连续)索引以将此输出与另一个数组配对。简洁的解决方案,尽管稍加解释可以帮助经验不足的人理解。您的意思是
$sum+=$val
?我认为它是错误的
$sum+=$sum;
$array = array( "0"=> 1, "1"=> 1, "2"=> 5, "3"=> 1, "4"=> 1, "7"=> 1, "8"=> 3, "9"=> 1 );
var_dump($array);
$newArray = array();

$sum = 0;
foreach ($array as $a){
  $sum += $a;
  $newArray[]=$sum;
}

var_dump($newArray);
$array = array( "0"=> 1, "1"=> 1, "2"=> 5, "3"=> 1, "4"=> 1, "7"=> 1, "8"=> 3, "9"=> 1 );

$sum = 0;
$newArray = array();

foreach ($array as $key=>$val){
    $sum += $val;
    $newArray[$key]=$sum;
}
$sums = array_reduce($array, function (array $sums, $num) {
    return array_merge($sums, [end($sums) + $num]);
}, []);
    for($i=1;$i<sizeof($a);$i++)
    {
        $a[$i]=$a[$i]+$a[$i-1];
    }