-3

我有一个数组$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),...)

4

2 回答 2

0

除其他外,您在使用 时正在更改数组的长度array_splice,但您没有$i以任何方式进行调整。

事实上,您可以array_splice完全删除该行,因为您将继续迭代数组。

此外,如果您超过10 岁,您只会开始一个新数组。您应该将您的条件更改为:

if(!isset($num_arr[$i+1]) || $sum+$num_arr[$i+1] >= 10)
于 2013-05-13T03:01:26.163 回答
0

实现一个“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

于 2013-05-13T03:09:23.750 回答