今日検索したので備忘録としてまとめ。
PHP で連想配列の特定のキーの値を合計する方法についてです。
実際に書いたコードは、単純に foreach()
を使って計算を行ったのですが、もっと他に方法がないのか?と調べてみました。
参考にさせていただいた記事はこちらから。
【PHP】連想配列の特定のキーの値の合計をいろんな方法で取得してみる – Qiita
https://qiita.com/yusukeito58/items/4b8270719eef1cbc3512
どうやらこちらの筆者さんも、同じように他の方法はないのか?と調べられていたようです。
方法としては、まずは foreach()
を使うパターンです。
私もこちらの方法を使いました。
$result = array("id" => "A", "prize" => 100, "id" => "B", "prize" => 200, "id" => "C", "prize" => 150, "id" => "D", "prize" => 300, "id" => "E", "prize" => 400, ); $sum = 0; foreach($result as $data) { $sum += $data["prize"]; }
次は array_reduce()
関数を使う方法です。
$result = array("id" => "A", "prize" => 100, "id" => "B", "prize" => 200, "id" => "C", "prize" => 150, "id" => "D", "prize" => 300, "id" => "E", "prize" => 400, ); $sum = array_reduce($result, function($carry, $data) { return $carry += $data['prize']; });
行数は少ないですが、何をやっているのかがわかりにくいように思います。
個人的には foreach()
関数を使う方が好みですね。
最後は array_sum()
関数と array_column()
関数を組み合わせる方法です。
$result = array("id" => "A", "prize" => 100, "id" => "B", "prize" => 200, "id" => "C", "prize" => 150, "id" => "D", "prize" => 300, "id" => "E", "prize" => 400, ); $sum = array_sum(array_column($result, 'prize'));
この方法が一番行数が少なくすっきりしていますね。
また、array_reduce()
を使う方法よりも分かりやすく感じます。
更に、参考サイトでは処理速度の計算も行っており、結果としては、最後の array_sum()
関数と array_column()
関数を組み合わせる方法が一番処理が早いようです。
ちなみに、foreach()
を使う方法が 2番目で、array_reduce()
関数を使う方法が一番遅いようでした。
なので、よっぽど理由がなければ、3番目か 1番目の方法を使うことをおすすめします。
以上、連想配列の特定のキーの値を合計する方法でした。
参考になれば幸いです。