PHPのarray_rand関数の使い方!配列からランダムなキーを取得する

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に指定した場合(単一のキーを選択):
    選択された単一のキー(整数または文字列)が返されます。
  • $num1より大きい値に指定した場合(複数のキーを選択):
    選択されたキーの配列が返されます。この配列の要素は、ランダムに選択されたキーです。

注意: 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_randPHP Fatal error: Uncaught ValueErrorとなります。

まとめ

PHPのarray_rand関数は、配列からランダムなキーを効率的に選択するための便利なツールです。
単一のキーだけでなく、複数のキーを同時に取得することも可能です。

クイズの作成、ランダムなコンテンツ表示、サンプルの選択など、様々な場面で活躍します。
キーが返される点、および選択するキーの数が配列の要素数を超えないように注意して、この関数を効果的に活用しましょう。

PHP

コメント