I have seen various posted about this question so am aware some answers to this may exist. however I am none the wiser after reading these.
I have an array that is
I would use array_map to reduce the array to only what is needed. Bear in mind, this will only work with PHP 5.3 onwards.
$total_vat = array_sum( array_map(
function($element){
return $element['vatAmount'];
},
$account_invoices));
Just another way to do this using array_reduce:
$vatMount = array_reduce($account_invoices, function($total, $value) {
return $total + $value['vatAmount'];
});
A way to do this using a PHP 5.3+ anonymous function
$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;
You can do this using array_map() and select the vatAmount
column first:
$totalVatAmount = array_sum(array_map(function($account_invoices) {
return $account_invoices['vatAmount'];
}, $account_invoices));
Of course, internally this performs a double loop; it's just that you don't see it inside the code. If you use array_reduce() then you can get rid of one loop:
$totalVatAmount = array_reduce($account_invoices,
function($totalAmount, $item) {
$totalAmount += $item['vatAmount'];
return $totalAmount;
},
0
);
However, if speed is the only interest, you should use foreach
. Because there is no function calls used to calculate the final sum. This solution is faster than other solution.
$totalVatAmount = 0;
foreach ($account_invoices as $item) {
$totalVatAmount += $item['vatAmount'];
}