22

この質問についてさまざまな投稿を見てきましたので、これに対するいくつかの回答が存在する可能性があることを認識しています。しかし、これらを読んだ後、私は賢明ではありません。

次のような配列があります。

[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'])
4

10 に答える 10

72

PHP 5.5+ を使用している場合は、ループやコールバックを使用せずにこれを行うことができます (関数呼び出しは比較的高価であるため) ... 以下を使用するだけです:

$sum = array_sum(array_column($account_invoices, 'vatAmount'));
于 2014-08-29T00:39:10.373 に答える
26

array_map を使用して、配列を必要なものだけに減らします。これは PHP 5.3 以降でのみ機能することに注意してください。

$total_vat = array_sum( array_map(
                 function($element){
                     return $element['vatAmount'];
                 }, 
             $account_invoices));
于 2012-10-11T11:50:46.157 に答える
19

それを行う方法は次のとおりです。

$sum = 0;

foreach($account_invoices as $num => $values) {
    $sum += $values[ 'vatAmount' ];
}
于 2012-10-11T11:45:27.567 に答える
9

first を使用array_mapして値を収集できvatAmoutます。

$sum = array_sum(array_map(function($var) {
  return $var['vatAmout'];
}, $account_invoices));
于 2012-10-11T11:51:12.000 に答える
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;
于 2012-10-11T11:55:21.480 に答える
1

また、これを行うこともできます(array_sum関数が好きな場合):

foreach($account_invoices as $num => $values) {
    $vatAmount[] = $values[ 'vatAmount' ];
}

$Total = array_sum($vatAmount);
于 2012-10-11T11:51:57.287 に答える
1

array_reduce を使用してこれを行う別の方法:

$vatMount = array_reduce($account_invoices, function($total, $value) {
    return $total + $value['vatAmount'];
});
于 2014-12-02T10:28:53.143 に答える
1

これを で直接行うことはできません。これにより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);
于 2012-10-11T11:49:57.920 に答える