私はこの質問についてさまざまな投稿を見てきたので、これに対するいくつかの回答が存在する可能性があることを認識しています。しかし、これらを読んだ後、私は賢明ではありません。
次のような配列があります。
[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'])
それを行うための方法:
$sum = 0;
foreach($account_invoices as $num => $values) {
$sum += $values[ 'vatAmount' ];
}
PHP 5.5+を使用している場合、ループやコールバックを使用せずにこれを行うことができます(関数呼び出しは比較的高価であるため))...以下を使用してください:
$sum = array_sum(array_column($account_invoices, 'vatAmount'));
Array_mapを使用して、配列を必要なものだけに減らします。覚えておいてください、これはPHP 5.3以降でのみ機能します。
$total_vat = array_sum( array_map(
function($element){
return $element['vatAmount'];
},
$account_invoices));
array_map
最初にvatAmout
値を収集します。
$sum = array_sum(array_map(function($var) {
return $var['vatAmout'];
}, $account_invoices));
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;
array_map()
を使用してこれを実行し、最初にvatAmount
列を選択します。
_$totalVatAmount = array_sum(array_map(function($account_invoices) {
return $account_invoices['vatAmount'];
}, $account_invoices));
_
もちろん、これは内部的に二重ループを実行します。コード内に表示されないだけです。 array_reduce()
を使用すると、1つのループを取り除くことができます。
_$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'];
}
_
Array_reduceを使用してこれを行うもう1つの方法:
$vatMount = array_reduce($account_invoices, function($total, $value) {
return $total + $value['vatAmount'];
});
配列内のすべてを合計するarray_sum
を使用してこれを直接行うことはできません。
あなたはループでそれを行うことができます:
$sum = 0;
foreach($items as $item)
$sum += $item['vatAmount'];
または、配列をフィルタリングすることもできます(この場合はあまり便利ではありません)。ただし、たとえば、S&H費用とVATプラスを計算する必要がある場合は、各単一の項目から計算し、合計します。 ...):
// 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);
また、これを行うことができます(array_sum関数が好きな場合):
foreach($account_invoices as $num => $values) {
$vatAmount[] = $values[ 'vatAmount' ];
}
$Total = array_sum($vatAmount);