今日検索したので備忘録としてまとめ。
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番目の方法を使うことをおすすめします。
以上、連想配列の特定のキーの値を合計する方法でした。
参考になれば幸いです。