2013-05-13 67 views
-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),...)

+0

您目前收到的實際結果是什麼? – sevenseacat 2013-05-13 02:59:29

回答

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

0

其中,當您使用array_splice時,您正在更改陣列的長度,但您沒有以任何方式調整$i

事實上,你可以完全刪除那條線,因爲你正在繼續遍歷數組。

此外,你只能開始一個新的數組,如果你超過 10.你應該改變你的條件是:

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