我有一些数组,我需要转换为新数组,并将所有值与所有先前的值相加。例如(数组长度,键和值总是不同),这就是我所拥有的:
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);
..不幸的是再次错了。我花了很多时间想办法不去达到我需要的地方,有人能指引我走向正确的方向吗?
答案 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;
}
确保索引正确。