1. ホーム
  2. PHP

【PHP】array_sum・array_product・min・max・count で配列を集計する方法

Share

配列に入った数値の合計を出したい、最大値や最小値を知りたい、件数を数えたい——こうした「集計」は PHP の標準関数で手早くできます。自分で foreach ループを回さなくても、array_sumarray_productminmaxcount を使えば1行で済みます。この記事では、それぞれの基本の使い方と戻り値、空配列や数値以外が混ざったときの挙動、平均値を求める応用例までを、動かせるコードつきで解説します。

配列の集計に使う関数の一覧

まずは、この記事で扱う関数の役割を一覧で確認しましょう。いずれも引数に配列を渡すだけで結果を返してくれます(minmax は複数の引数を渡す書き方もあります)。

関数求めるもの戻り値
array_sum()すべての要素の合計数値(int または float)
array_product()すべての要素を掛け合わせた積数値(int または float)
min()最小値もっとも小さい要素
max()最大値もっとも大きい要素
count()要素の個数整数

array_sum で合計を求める

array_sum() は、配列に入っている数値をすべて足し合わせた合計を返します。引数は配列ひとつだけです。

sum.php
<?php
$prices = [120, 80, 300, 250];

echo array_sum($prices); // 750

整数だけなら整数、小数(float)が混ざっていれば float の合計が返ります。文字列が含まれている場合は、数値として解釈できる部分が計算に使われ、数値にできない文字列は 0 として扱われます。

array_product で積を求める

array_product() は、配列の要素をすべて掛け合わせた積を返します。割引率の掛け合わせや、組み合わせ数の計算などに使えます。

product.php
<?php
$numbers = [2, 3, 4];

echo array_product($numbers); // 24(2 × 3 × 4)

なお、空配列を array_product() に渡すと、何も掛けるものがないため戻り値は 1 になります(合計の array_sum() は空配列で 0)。混同しやすいので覚えておきましょう。

min・max で最小値・最大値を求める

min() は最小値、max() は最大値を返します。使い方は2通りあり、配列を1つ渡す書き方と、値をカンマ区切りで複数渡す書き方のどちらもできます。

min-max.php
<?php
$scores = [82, 95, 67, 100, 78];

echo min($scores); // 67
echo max($scores); // 100

// 値を直接並べてもよい
echo min(3, 9, 1);  // 1
echo max(3, 9, 1);  // 9

数値だけでなく文字列の比較もでき、その場合は辞書順(アルファベット順)で大小が判定されます。ただし、数値と文字列が混ざった配列では結果が直感に反することがあるため、集計するときは型をそろえておくのが安全です。

count で要素の数を数える

count() は配列の要素数を返します。平均値を出すときや、件数を表示するときによく使います。

count.php
<?php
$members = ['田中', '佐藤', '鈴木'];

echo count($members); // 3

平均値を求める(組み合わせの例)

これらの関数を組み合わせると、いろいろな集計ができます。代表的なのが平均値です。合計(array_sum)を件数(count)で割れば求められます。

average.php
<?php
$scores = [82, 95, 67, 100, 78];

// 0 で割るエラーを避けるため、空でないか確認する
if (count($scores) > 0) {
    $average = array_sum($scores) / count($scores);
    echo $average; // 84.4
}

このように、件数で割る前に count()0 でないことを確認しておくと、「0 で割る」エラーを防げます。

空配列を渡すときの注意

集計関数は、空の配列を渡したときの挙動がそれぞれ異なります。ここを知らないと、データが空のときに思わぬ結果やエラーになります。

array_sum・array_product・count は安全に動く

array_sum([])0array_product([])1count([])0 を返します。エラーにはならないため、そのまま使えます。

min・max は空配列だとエラーになる

一方で min()max() に空の配列を渡すと、比較する要素がないため ValueError(PHP 8.0 より前は警告)になります。配列が空になりうる場面では、先に件数を確認してから呼び出すか、値が無いときの初期値を別に用意しておきましょう。

empty-check.php
<?php
$values = [];

// 空かどうかを確認してから min/max を呼ぶ
$highest = empty($values) ? null : max($values);

echo $highest ?? '値がありません'; // 値がありません

まとめ

配列の集計は、自分でループを書かなくても標準関数で完結します。合計は array_sum、積は array_product、最小・最大は minmax、件数は count です。これらを組み合わせれば平均値なども簡単に求められます。注意点は空配列のときの挙動で、minmax はエラーになるため、件数を確認してから呼び出すのが安全です。用途に合わせて使い分けて、集計処理をすっきり書きましょう。

参考ページ