-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

楽しみのために「ワンライナー」を実装しました:

$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 に答える
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 に答える