PHPで連想配列の同じキーを合計して平均を計算する方法

php-array-average
  • URLをコピーしました!

久しぶりのPHPネタ。
今回、PHP連想配列から、少ないコード量で簡単かつ高速に同じキーに格納されている値合計し、配列の数で割ることで平均を計算する方法をご紹介します!

目次

例題:連想配列

まずは、連想配列の例題です。
ここでやりたい事は、以下の連想配列にある[value]の数値を合計して平均値を計算します。

連想配列の合計方法に注目!

PHP配列の値を合計してください、と言わられて真っ先に思い付くのは、以下のようにforeach()で値を1つずつ足していく方法ではないでしょうか?

管理者
管理者

確かに間違いではないですが…
今回はこの概念をぶっ壊します!

実は、PHPのバージョン4や5の時代からある便利な関数を使うと、たった1行のコードで済みます。

array_sum()とarray_column()を使う

array_sum()はその名の通り、配列内の値の合計を計算する関数で、array_column()は指定した連想配列のキーの値を返す関数です。
特に注目してもらいたいのはarray_column()ですが、念のため、この2つの関数について少しだけ解説しておきます。

array_sum()

以下の配列連想配列array_sum()関数を使用して、配列内の全ての数値を合計します。

array_sum()合計した結果はこのようになります。

array_column()

array_column()で、冒頭の例題で記述した連想配列の[name]キーを指定して値を取得します。

array_column()で取得した結果はこのようになります。

【まとめ】合計と平均を求める

いよいよ本題です。
上記のarray_sum()とarray_column()を組み合わせることで簡単に合計を計算することができ、平均を計算するには、その合計からcount()配列の数をカウントして割るだけです!

こちらは例題の連想配列から、array_column()で[value]キーに格納されている値を取得し、array_sum()合計して、count()で取得した配列の数で割っています。
結果はこのようになります。

しかも、この方法はforeach()やその他の方法で計算するよりも、処理速度が高速ですので、連想配列のデータが大きければ大きいほど役に立つので、ぜひ覚えておいてください!
以下の参考サイトで実際に処理速度を計測していました。

方法処理速度[sec]
foreachでループする0.14497804641724
array_reduceとクロージャを組み合わせる0.16593194007874
array_sumとarray_columnを組み合わせる0.076914072036743
引用:【PHP】連想配列の特定のキーの値の合計をいろんな方法で取得してみる – Qiita

以上です!
長年PHPをやっていても、便利なのにまだまだ知らない関数がたくさんありますw

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次