2015-11-17 507 views
0

,所以我有它通過循環獲得總多維數組

foreach ($items as $item) 
{ 
    $item_arr[$id]['count'] = $item->rowcount; 
} 

現在我想做的事就是讓數之像這樣創建一個數組。我知道我可以使用$ sum + = $ item-> rowcount;但我想知道如果當在foreach做有使用這樣的外循環更有效的方式:

$sum = array_sum($item_arr[]['count']); 

但是,這並不表示工作它不喜歡的[],是有辦法要做到這一點,或者只是保持計數在foreach循環中的最佳方式。只是想保持代碼更清晰,更易讀,但也許是一個愚蠢的問題?

+0

[多維數組的數組的可能的複製\ _sum](http://stackoverflow.com/questions/12838729/multidimensional-array-array-sum) –

+0

除非這真的是你的應用程序的瓶頸不要優化。請參閱http://c2.com/cgi/wiki?PrematureOptimization – David

+1

如果您正在執行循環,那麼計算其內部的總和可能會比在之後的單獨步驟中執行更好。 ('array_sum'這樣的函數也需要遍歷元素,只能在「內部」)。 – CBroe

回答

0

$ id從哪裏來?

最好是$ sum + = $ item-> rowcount;

$sum = 0; 
foreach ($items as $item) { 
$sum += $item->rowcount; 
} 
echo $sum; 
0

您可以使用array_reduce()這樣的

function sum($carry, $item){ 
    return $carry + $item['count']; 
} 
array_reduce($item_arr, "sum"); 
+0

'return $ carry + $ item ['count'];' – deceze

+0

@deceze如果你認爲這種方式是最好的。我編輯了我的答案 –

+0

嗯,我真的會更進一步:'array_reduce($ item_arr,函數($ carry,$ item){return $ carry + $ item ['count'];})''。 – deceze

0

也許是一個主題的變化,但像array_reduce你可以選擇使用array_walk

$total=0; 
$arr=array(
    array('count'=>23), 
    array('count'=>54), 
    array('count'=>91), 
    array('count'=>86) 
); 

array_walk($arr, function(&$i, $k, &$t){ 
    $t += $i['count']; 
}, &$total); 

echo 'total:'.$total;