将每个最后一个值与数组中的所有先前值相加

时间:2014-12-28 12:46:27

标签: php arrays

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

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

..不幸的是再次错了。我花了很多时间想办法不去达到我需要的地方,有人能指引我走向正确的方向吗?

5 个答案:

答案 0 :(得分:5)

建议您使用array_slice()& array_sum()

$array = array( "0"=>1,"1"=>1,"2"=>5,"3"=>1,"4"=>1,"7"=>1,"8"=>3,"9"=>1);
$keys = array_keys($array);
$array = array_values($array);

$newArr = array();

foreach ($array as $key=>$val) {
    $newArr[] = array_sum(array_slice($array, 0, $key+1));
}
$newArr = array_combine($keys, $newArr);

print '<pre>';
print_r($newArr);
print '</pre>';

<强>输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 7
    [3] => 8
    [4] => 9
    [7] => 10
    [8] => 13
    [9] => 14
)

参考:

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

您可以查看数组总和并添加到新数组(以简单的方式):

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

答案 3 :(得分:2)

$sums = array_reduce($array, function (array $sums, $num) {
    return array_merge($sums, [end($sums) + $num]);
}, []);

换句话说,这会迭代数组(array_reduce)并在每次迭代中将一个数字附加(array_merge)到一个新数组($sums),这是一个总和数组中的上一项(end($sums))和当前数字。使用PHP 5.4+数组语法([])。

答案 4 :(得分:1)

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

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

确保索引正确。