数值数组:将前一个元素的值添加到当前元素

时间:2014-07-25 07:22:31

标签: php arrays

对于数组中的每个元素,我需要将前一个元素的值添加到它的当前元素中。例如:

Array
(
     [0] => 460
     [1] => 25
     [2] => 25
     [3] => 25
     [4] => 25
     [5] => 25
     [6] => 25
)

我怎样才能得到以下内容:

Array
(
    [0] => 460
    [1] => 485
    [2] => 510
    [3] => 535
    [4] => 560
    [5] => 585
    [6] => 610
)

有什么想法吗?

8 个答案:

答案 0 :(得分:3)

与其他人相比,这是一个更快的解决方案:

foreach ($a as $i => $val) {
    // make sure the current item is not the first one.
    // because the first one is the base number
    if ($i > 0) {
       // Update current $i (INDEX) by
       // adding the previous value ($a[$i -1]) with the current value ($val)
        $a[$i] = $a[$i - 1] + $val;
    }
}

由于0是第一个值,我们不能在它之前递增:)因此if语句

这是一个演示:Example


使用什么循环方法无关紧要,这就是你应用它的方式。看,这是在for循环中完成的完全相同的事情:

for($i = 0; $i < count($a); $i++) {
    if($i > 0) {
        $a[$i] = $a[$i - 1] + $a[$i];
    }
}

这一切都归结为编码人员使用它的偏好。


这两个循环都返回正确的数据:

Array
(
    [0] => 460
    [1] => 485
    [2] => 510
    [3] => 535
    [4] => 560
    [5] => 585
    [6] => 610
)

答案 1 :(得分:2)

喜欢这个吗?

$source = array(460, 25, 25, 25, 25, 25, 25);
$result = array();

$last = 0;
foreach($source as $s){
    $last = $result[] = $s+$last;
}

答案 2 :(得分:0)

$previous = 0;
foreach ($a as $key => &$value)
    $previous = $value = $previous + $value;

$sum = 0;
foreach ($a as $key => &$value)
{
    $sum += $value;
    $value = $sum;
}

答案 3 :(得分:0)

获取上一个索引的值(检查index>> 0),并将其添加到当前值。

$values = array(
     460,
     25,
     25,
     25,
     25,
     25,
     25
);

foreach($values as $key => &$value){

   if($key > 0){
    $prev_value = $values[$key-1];
    $value += $prev_value;
   }
}

echo print_r($values);

答案 4 :(得分:0)

  

$ array1 =(460,25,25,25,25,25,25);

     

function calculateAdjecentSum($ array1)

     

{

     

$ array2 = array();

     

$ pointer = 0;

     

foreach($ array1 as $ number){

   $sum      = $pointer + $number;

   $array2[] = $sum; 

   $pointer  = $sum;
     

}

     

返回$ array2;

     

}

答案 5 :(得分:0)

使用for循环就足够了:

<?php

$array = array
(
     0 => 460,
     1 => 25,
     2 => 25,
     3 => 25,
     4 => 25,
     5 => 25,
     6 => 25,
);

for ($i=1, $c = count($array); $i<$c; ++$i) {
    $array[$i] += $array[$i-1];

}

var_dump($array);

我不知道为什么所有其他答案在这种情况下使用foreach循环,因为在我看来最好这样做(没有条件,没有临时变量,没有来自foreach的未设置引用)。

答案 6 :(得分:0)

你可以这样做

<?php
$yourarray = array(460, 25, 25, 25, 25, 25, 25);
$l = 0;
foreach($yourarray as $b){
$l = $b+$l;
echo $last;
}

输出460485510535560585610

答案 7 :(得分:0)

试试这个:

<?php
$array  = array( 460, 25, 25, 25, 25, 25, 25);
$result = array();

for ($i=count($array);$i>0; $i--){
    $result[($i-1)]  = array_sum($array);
    array_pop($array);
}

echo "<pre>";
ksort($result);
print_r($result);
?>

输出:

Array
(
    [0] => 460
    [1] => 485
    [2] => 510
    [3] => 535
    [4] => 560
    [5] => 585
    [6] => 610
)