我有一个数组$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),...)
?
答案 0 :(得分:0)
除此之外,当您使用array_splice
时,您正在更改数组的长度,但您没有以任何方式调整$i
。
事实上,您可以完全删除array_splice
行,因为您将继续遍历数组。
另外,如果你 over 10,你只会开始一个新阵列。你应该改变你的条件:
if(!isset($num_arr[$i+1]) || $sum+$num_arr[$i+1] >= 10)
答案 1 :(得分: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);