为什么这不是我需要的数组


why this is not the array I need?

我有一个数组$num_arr,所以我想得到一个新的数组,它的和小于10,所以我写这样的代码,

$num_arr=array(1,3,6,5,4,2,7,9,5,3,6,2,4,7);
$sum=0;
for($i=0;$i<=count($num_arr);$i++){
    $sum+=$num_arr[$i];
    $k++;
    if($sum>=10){
        $need_arr[]=array_slice($num_arr,0,$k);
        array_splice($num_arr,0, $k);   
        $k=0;
        $sum=0;
    }       
}

结果$need_arr是不正确的,这就是为什么以及如何得到正确的数组像这样:array(array(1,3,6),array(5,4),array(2,7),array(9),...) ?

实现了一个"oneliner",只是为了好玩:

$num_arr=array(1,3,6,5,4,2,7,9,5,3,6,2,4,7);
$result = array_reduce($num_arr, function($result, $curr) {
    if (!count($result)) {
        $result[] = array();
    }
    $last =& $result[count($result) - 1];
    if (array_sum($last) + $curr > 10) {
        $result[] = array($curr);
    } else {
        $last[] = $curr;
    }
    return $result;
}, array());
var_dump($result);

在线演示:http://ideone.com/aFVmkp

当您使用array_splice时,您正在改变数组的长度,但您没有以任何方式调整$i

实际上,您可以完全删除array_splice行,因为您将继续遍历数组。

同样,只有当大于 10时,才开始创建一个新数组。您应该将条件更改为:

if(!isset($num_arr[$i+1]) || $sum+$num_arr[$i+1] >= 10)