count() / array_sum() / range()
| 対応: | PHP 4(2000) |
|---|
配列の要素数や合計値を取得したり、連番の配列を生成したり、配列をランダムに操作する関数です。
構文
// 配列の要素数を返す count(配列, モード); // 配列の値の合計を返す array_sum(配列); // 配列の値の積を返す array_product(配列); // 連番の配列を生成する range(開始値, 終了値, ステップ); // 配列の要素をランダムに並べ替える shuffle(配列); // 配列からランダムにキーを取得する array_rand(配列, 取得数);
関数一覧
| 関数 | 概要 |
|---|---|
| count($array, $mode) | 配列の要素数を返します。第2引数に『COUNT_RECURSIVE』を指定すると多次元配列の全要素を再帰的にカウントします。 |
| array_sum($array) | 配列の値の合計を返します。数値以外の値は0として扱われます。 |
| array_product($array) | 配列の値の積を返します。空の配列の場合は『1』を返します。 |
| range($start, $end, $step) | 開始値から終了値までの連番を含む配列を生成します。文字列にも対応しています。 |
| shuffle($array) | 配列の要素をランダムに並べ替えます。キーは0から振り直されます。 |
| array_rand($array, $num) | 配列からランダムに1つ以上のキーを返します。 |
サンプルコード
count.php
<?php
// 配列の要素数を取得する
$members = ['item_a', 'item_b', 'item_c', 'item_d'];
echo count($members); // 『4』と出力される
// 配列の合計を計算する
$prices = [150, 80, 300, 200];
echo array_sum($prices); // 『730』と出力される
// 配列の積を計算する
$nums = [2, 3, 4];
echo array_product($nums); // 『24』と出力される
// 平均値を計算する
$scores = [85, 92, 78, 95, 88];
$average = array_sum($scores) / count($scores);
echo $average; // 『87.6』と出力される
// 連番の配列を生成する
$one_to_ten = range(1, 10);
print_r($one_to_ten); // 『1』から『10』までの配列が生成される
// ステップを指定して偶数の配列を生成する
$evens = range(2, 10, 2);
print_r($evens); // 『2, 4, 6, 8, 10』の配列になる
// アルファベットの配列を生成する
$alphabet = range('A', 'F');
print_r($alphabet); // 『A, B, C, D, E, F』の配列になる
// 配列をランダムに並べ替える(毎回変わる)
$cards = range(1, 5);
shuffle($cards);
print_r($cards);
// 配列からランダムに要素を選ぶ
$items = ['item_a', 'item_b', 'item_c', 'item_d', 'item_e'];
$key = array_rand($items);
echo $items[$key]; // ランダムに1つが出力される
// 複数のキーをランダムに選ぶ
$keys = array_rand($items, 2);
print_r($keys); // ランダムに選ばれた2つのキーが返される
実行すると次のように出力されます。
php count.php
4
730
24
87.6
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
)
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
Array
(
[0] => A
[1] => B
[2] => C
[3] => D
[4] => E
[5] => F
)
# shuffle()の結果はランダムです。実行のたびに異なります。例:
Array
(
[0] => 3
[1] => 1
[2] => 5
[3] => 2
[4] => 4
)
item_a
# array_rand()の結果はランダムです。実行のたびに異なります。例:
Array
(
[0] => 0
[1] => 3
)
count()はオブジェクトに使えるが配列以外は注意
PHP 7.2以降、配列でも『Countable』インターフェースを実装したオブジェクトでもない値を『count()』に渡すと警告が発生します。文字列や数値を渡さないよう注意してください。
<?php $members = ['item_a', 'item_b', 'item_c']; echo count($members); // 配列でない値を渡すと PHP 7.2 以降で警告が発生します $name = 'item_a'; // echo count($name); // Warning: count(): Parameter must be an array or an object that implements Countable
shuffle()はキーを振り直す
『shuffle()』を実行すると、元の配列を直接変更し、数値キーは0から振り直されます。連想配列に使うと元のキーが失われます。元のキーを保持したままランダムに並べ替えたい場合は『uasort()』等を使います。
<?php $items = [ 'a' => 'item_a', 'b' => 'item_b', 'c' => 'item_c', ]; shuffle($items); // キーが 0, 1, 2 に振り直されます print_r($items); // Array // ( // [0] => item_b // [1] => item_a // [2] => item_c // ) // 元のキー 'a' 'b' 'c' は失われています
array_rand()はキーを返す(値ではない)
『array_rand()』は要素の値ではなくキーを返します。値を取得するには返されたキーで配列にアクセスする必要があります。
<?php
$items = ['item_a', 'item_b', 'item_c', 'item_d', 'item_e'];
$key = array_rand($items);
echo $key; // キーが出力されます(例: 『2』)
echo $items[$key]; // 値にアクセスするにはキーを使います(例: 『item_c』)
// 複数のキーを取得する場合
$keys = array_rand($items, 2);
foreach ($keys as $k) {
echo $items[$k] . "\n"; // キーを使って値を取得します
}
実践パターン
ランダムな抽選ロジック
メンバーからランダムに1人を選ぶ抽選処理の例です。
<?php
function drawLottery(array $members, int $count = 1): array {
$keys = array_rand($members, min($count, count($members)));
$results = [];
if (!is_array($keys)) {
$keys = [$keys];
}
foreach ($keys as $k) {
$results[] = $members[$k];
}
return $results;
}
$members = ['item_a', 'item_b', 'item_c', 'item_d', 'item_e'];
$winners = drawLottery($members, 2);
foreach ($winners as $winner) {
echo $winner . " が当選!\n";
}
sample_lottery.php
php sample_lottery.php item_c が当選! item_e が当選!
配列の統計処理
合計・平均・最大・最小をまとめて取得する例です。
<?php $scores = ['item_a' => 95, 'item_b' => 88, 'item_c' => 72, 'item_d' => 91, 'item_e' => 84]; echo "件数: " . count($scores) . "\n"; echo "合計: " . array_sum($scores) . "\n"; echo "平均: " . (array_sum($scores) / count($scores)) . "\n"; echo "最大: " . max($scores) . "\n"; echo "最小: " . min($scores) . "\n";
sample_stats.php
php sample_stats.php 件数: 5 合計: 430 平均: 86 最大: 95 最小: 72
概要
『count()』は配列だけでなく『Countable』インターフェースを実装したオブジェクトにも使用できます。PHP 7.2以降では、配列やCountableオブジェクト以外を渡すと警告が発生するため注意してください。エイリアスとして『sizeof()』もありますが、『count()』のほうが一般的に使用されています。
『array_sum()』は連想配列の値にも対応しており、数値以外の値は0として扱われます。『array_sum()』と『count()』を組み合わせることで、簡単に平均値を計算できます。
『range()』は数値だけでなく文字列の連番も生成できます。ステップに負の値を指定すれば降順の配列も作成可能です。
『shuffle()』は元の配列を直接変更する破壊的な関数で、キーは0から振り直されます。『array_rand()』は要素そのものではなくキーを返すため、値を取得するには返されたキーで配列にアクセスする必要があります。配列の集約処理については『array_reduce()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。