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