我见过各种关于这个问题的帖子,所以我知道可能存在一些答案。但阅读这些之后,我并不聪明。
我有一个如下所示的数组。
[0] => Array
(
[id] => 95659865986
[invoiceNumber] => 6374324
[invoiceTitle] => Monthly
[invoiceStatus] => Paid
[accountId] => 6235218753
[totalExVat] => 158.95
[dateCreated] => 1 Apr 2012
[vatAmount] => 20.00
)
我想做的就是对这个数组的vatAmount
值进行数组求和。
由于以下似乎没有做太多。
(array_sum($account_invoices['vatAmount'])
答案 0 :(得分:53)
如果您使用的是PHP 5.5+,则可以在不循环或使用回调的情况下执行此操作(因为函数调用相对较贵)...只需使用:
$sum = array_sum(array_column($account_invoices, 'vatAmount'));
答案 1 :(得分:25)
我会使用array_map将数组减少到只需要的数量。请记住,这只适用于PHP 5.3及以上版本。
$total_vat = array_sum( array_map(
function($element){
return $element['vatAmount'];
},
$account_invoices));
答案 2 :(得分:15)
只是一种方法:
$sum = 0;
foreach($account_invoices as $num => $values) {
$sum += $values[ 'vatAmount' ];
}
答案 3 :(得分:8)
您可以先使用array_map
来收集vatAmout
值。
$sum = array_sum(array_map(function($var) {
return $var['vatAmout'];
}, $account_invoices));
答案 4 :(得分:4)
使用PHP 5.3+匿名函数
执行此操作的方法$account_invoices = array(
0 => array(
'id' => '95659865986',
'invoiceNumber' => '6374324',
'invoiceTitle' => 'Monthly',
'invoiceStatus' => 'Paid',
'accountId' => '6235218753',
'totalExVat' => 158.95,
'dateCreated' => '1 Apr 2012',
'vatAmount' => 20.00
),
1 => array(
'id' => '95659865987',
'invoiceNumber' => '6374325',
'invoiceTitle' => 'Monthly',
'invoiceStatus' => 'Paid',
'accountId' => '6235218753',
'totalExVat' => 208.95,
'dateCreated' => '1 May 2012',
'vatAmount' => 25.00
),
);
$sumDetail = 'vatAmount';
$totalVAT = array_reduce($account_invoices,
function($runningTotal, $record) use($sumDetail) {
$runningTotal += $record[$sumDetail];
return $runningTotal;
},
0
);
echo $totalVAT;
答案 5 :(得分:3)
您可以使用array_map()
执行此操作,然后先选择vatAmount
列:
$totalVatAmount = array_sum(array_map(function($account_invoices) {
return $account_invoices['vatAmount'];
}, $account_invoices));
当然,在内部执行双循环;只是你没有在代码中看到它。如果您使用array_reduce()
,那么您可以摆脱一个循环:
$totalVatAmount = array_reduce($account_invoices,
function($totalAmount, $item) {
$totalAmount += $item['vatAmount'];
return $totalAmount;
},
0
);
但是,如果速度是唯一的兴趣,则应使用foreach
。因为没有用于计算最终总和的函数调用。此解决方案比其他解决方案更快。
$totalVatAmount = 0;
foreach ($account_invoices as $item) {
$totalVatAmount += $item['vatAmount'];
}
答案 6 :(得分:1)
您无法直接使用array_sum
执行此操作,这会对数组中的所有内容求和。
你可以用循环来完成:
$sum = 0;
foreach($items as $item)
$sum += $item['vatAmount'];
或者你可以过滤阵列(在这种情况下它不是很方便,但是如果你必须计算,比如,S& H费用加上增值税加......来自每一个item,然后总结......):
// Input: an array (element #n of array of arrays), output: VAT field
function getVAT($item)
{
return $item['vatAmount'];
}
// Array with all VATs
$vats = array_map('getVAT', $items);
$sum = array_sum($vats);
答案 7 :(得分:1)
你也可以这样做(如果你喜欢array_sum函数):
foreach($account_invoices as $num => $values) {
$vatAmount[] = $values[ 'vatAmount' ];
}
$Total = array_sum($vatAmount);
答案 8 :(得分:1)
使用array_reduce执行此操作的另一种方法是:
$vatMount = array_reduce($account_invoices, function($total, $value) {
return $total + $value['vatAmount'];
});
答案 9 :(得分:0)
array_sum_multiDimension辅助函数
if (!function_exists('array_sum_multidimensional')) {
/**
* returns the sum of a element from an array of arrays
*/
function array_sum_multidimensional(array $array, $elementKey){
$sum = 0;
foreach($array as $key => $value) {
$sum += $value[ $elementKey ];
}
return $sum;
}
}