2015-11-17 240 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;