PHPのarray_rand
関数は、配列から1つまたは複数のランダムなキーを選択するために使用されます。
この関数は、ランダムな項目を抽選する、クイズの質問をシャッフルする、表示するコンテンツをランダムに選ぶなど、様々な場面で利用できます。
単にランダムな要素の値が欲しい場合でも、キーを使って元の配列から値を取得する必要があるため、その点を理解しておくことが重要です。
この記事では、array_rand
関数の基本的な使い方、引数、戻り値、複数のキーを選択する方法、そして使用する際の注意点について解説します。
array_rand関数の基本的な構文
array_rand
関数の基本的な構文は以下の通りです。
mixed array_rand(array $array, int $num = 1): mixed
$array
: ランダムにキーを選択したい元の配列です。$num
: オプション。選択したいキーの数です。デフォルトは1
です。
array_rand関数の戻り値
$num
を省略するか1
に指定した場合(単一のキーを選択):
選択された単一のキー(整数または文字列)が返されます。$num
を1
より大きい値に指定した場合(複数のキーを選択):
選択されたキーの配列が返されます。この配列の要素は、ランダムに選択されたキーです。
注意: array_rand
はキーを返し、直接値を返すわけではありません。値が必要な場合は、返されたキーを使って元の配列から値を取得する必要があります。元の配列は変更されません。
array_rand関数を使ってみる
実際にarray_rand
関数を使って、動作を確認してみます。
例1:単一のランダムなキーと値を取得する
array_rand
関数を使って、キーを取得し、取得したキーで値も取得してきます。
<?php
$fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
// ランダムなキーを取得
$randomKey = array_rand($fruits);
// そのキーを使って対応する値を取得
$randomFruit = $fruits[$randomKey];
echo "ランダムに選ばれたキー: " . $randomKey . PHP_EOL;
echo "ランダムに選ばれた果物: " . $randomFruit . PHP_EOL;
// 実行例(毎回結果は変わる):
// ランダムに選ばれたキー: 2
// ランダムに選ばれた果物: orange
?>
文字列が入っている$fruits
配列を用意しています。
次の処理でarray_rand
を使って、ランダムなキーを取得しています。
次に取得したキーを使用して、値を取得しています。
これでランダムなキーと値が取得できました。
出力すると、毎回実行結果がランダムで変わることが確認できます。
例2:連想配列からランダムなキーと値を取得する
連想配列の場合でも、返されるのはキーです。
<?php
$users = [
'john_doe' => 'John Doe',
'jane_smith' => 'Jane Smith',
'peter_jones' => 'Peter Jones',
'alice_w' => 'Alice Williams'
];
$randomUsernameKey = array_rand($users);
$randomUsernameValue = $users[$randomUsernameKey];
echo "ランダムに選ばれたユーザーキー: " . $randomUsernameKey . PHP_EOL;
echo "ランダムに選ばれたユーザー名: " . $randomUsernameValue . PHP_EOL;
// 実行例:
// ランダムに選ばれたユーザーキー: peter_jones
// ランダムに選ばれたユーザー名: Peter Jones
?>
連想配列の$users
を用意しています。
次の処理でarray_rand
を使っています。取得できるのは連想配列のキーです。
そのあとにキーを使用して、連想配列の値を取得しています。
結果を確認すると、連想配列のキーと値が取得できたことが確認できます。
複数のキーを選択する方法
第2引数($num
)に1
より大きい値を指定すると、複数のランダムなキーを配列として取得できます。
例1:複数のランダムなキーを取得し、対応する値も取得する
複数のランダムなキーと値を取得します。
<?php
$quotes = [
'Stay hungry, stay foolish.',
'The only way to do great work is to love what you do.',
'Innovation distinguishes between a leader and a follower.',
'Your time is limited, so don\'t waste it living someone else\'s life.',
'Design is not just what it looks like and feels like. Design is how it works.'
];
// 3つのランダムなキーを取得
$randomKeys = array_rand($quotes, 3);
echo "ランダムに選ばれたキー: " . implode(', ', $randomKeys) . PHP_EOL;
echo "--- ランダムな引用 ---" . PHP_EOL;
foreach ($randomKeys as $key) {
echo "- " . $quotes[$key] . PHP_EOL;
}
// 実行例:
// ランダムに選ばれたキー: 1, 3, 0
// --- ランダムな引用 ---
// - The only way to do great work is to love what you do.
// - Your time is limited, so don't waste it living someone else's life.
// - Stay hungry, stay foolish.
?>
適当な文字列を並べた$quotes
配列を用意しています。
次の処理でarray_rand
を使っていますが、第2引数に数値を指定しています。
「3
」を指定しているので、3つのランダムなキーが配列として返ってきます。
最後に取得したランダムなキー配列を使って、値も取得して出力しています。
例2:選択するキーの数が配列の要素数より多いとき
配列の要素数よりも多くのキーを選択しようとすると、Fatal error
が発生して以降の処理が行われません。
<?php
$shortArray = [1, 2];
// 要素数2の配列から3つのキーを選ぼうとする
$result = array_rand($shortArray, 3);
var_dump($result);
// 出力:
// PHP Fatal error: Uncaught ValueError: array_rand(): Argument #2 ($num) must be between 1 and the number of elements in argument
?>
配列より大きい数値を設定すると、このようにエラーになるため注意が必要です。
array_rand関数を使う際の注意点
- 戻り値はキー:
array_rand
はキーを返す関数であり、直接値を返す関数ではありません。値が必要な場合は、返されたキーを使って元の配列から値をフェッチする必要があります。 - 元の配列は変更されない:
array_rand
は元の配列を変更しません。 - 連続したキーの保証なし: 返されるキーはランダムであり、必ずしも連続しているわけではありません。また、返されるキーの順序も保証されません。
- 空の配列の場合: 空の配列を
$array
に渡すと、array_rand
はPHP Fatal error: Uncaught ValueError
となります。
まとめ
PHPのarray_rand
関数は、配列からランダムなキーを効率的に選択するための便利なツールです。
単一のキーだけでなく、複数のキーを同時に取得することも可能です。
クイズの作成、ランダムなコンテンツ表示、サンプルの選択など、様々な場面で活躍します。
キーが返される点、および選択するキーの数が配列の要素数を超えないように注意して、この関数を効果的に活用しましょう。
コメント