【PHP8.x】array_rand関数の使い方

作成日: 更新日:

array_rand関数は、指定された配列から1つ以上のランダムなキーを選択して取得する関数です。この関数は、プログラム内で配列の要素を無作為に選びたい場合に利用されます。たとえば、ゲームでランダムなアイテムを選んだり、アンケートで質問をシャッフルしたりする際に便利です。

第一引数には、キーを選びたい元の配列を渡します。第二引数はオプションで、いくつキーを選びたいかを数値で指定します。この第二引数を省略した場合、デフォルトで1つのキーが選択されます。

戻り値は、選択されたキーまたはキーの配列です。もし、1つのキーを選んだ場合は、そのキーの値(文字列または整数)が直接返されます。複数のキーを選んだ場合は、選ばれたキーの値を要素とする新しい配列が返されます。ここで重要なのは、この関数が返すのはあくまで配列の「キー」であり、そのキーに対応する「値」そのものではない点です。もし、選択されたキーに対応する値が必要な場合は、返されたキーを使って元の配列にアクセスする必要があります。これにより、元の配列を直接変更することなく、安全にランダムな要素にアクセスできます。

基本的な使い方

構文(syntax)

<?php
$inputArray = ['alpha', 'beta', 'gamma'];
$randomKey = array_rand($inputArray);
?>

引数(parameters)

array $array, int $num = 1

  • array $array: キーまたはインデックスをランダムに取得したい配列
  • int $num = 1: 取得したいキーまたはインデックスの数 (デフォルトは1)

戻り値(return)

array|string|int

指定された配列からランダムに選択されたキー、またはキーの配列を返します。引数 $num を指定した場合、その数だけキーが返されます。

サンプルコード

PHP array_randでランダムなキーを取得する

<?php

/**
 * array_rand() の基本的な使用方法を示すサンプルコード。
 * 配列からランダムな要素のキーを一つ、または複数取得します。
 */
function demonstrateArrayRand(): void
{
    // サンプル配列を定義
    $fruits = [
        'apple',
        'banana',
        'cherry',
        'date',
        'elderberry',
    ];

    echo "元の配列:\n";
    print_r($fruits);
    echo "\n";

    // array_rand() を使ってランダムなキーを1つ取得する
    // デフォルトでは num が 1 なので、戻り値は文字列(キー)
    $randomKeySingle = array_rand($fruits);
    echo "ランダムに選ばれたキー (1つ): " . $randomKeySingle . "\n";
    echo "対応する値: " . $fruits[$randomKeySingle] . "\n\n";

    // array_rand() を使ってランダムなキーを複数取得する
    // num を指定すると、戻り値はキーの配列になる
    $randomKeysMultiple = array_rand($fruits, 3);
    echo "ランダムに選ばれたキー (3つ):\n";
    print_r($randomKeysMultiple);

    echo "対応する値 (3つ):\n";
    foreach ($randomKeysMultiple as $key) {
        echo "- キー: " . $key . ", 値: " . $fruits[$key] . "\n";
    }
}

// 関数の実行
demonstrateArrayRand();

?>

PHPのarray_rand関数は、指定した配列の中からランダムに選択された要素の「キー」を取得するために使用します。この関数は、配列の要素そのものではなく、その位置を示すキーを返します。

最初の引数には、ランダムにキーを選びたい対象の配列を指定します。必須の引数です。 二番目の引数である$numには、取得したいキーの数を整数で指定します。この引数は省略可能で、その場合はデフォルトで1つのキーが選択されます。

戻り値は、$numの値によって異なります。 もし$numが1の場合、単一のランダムなキーが文字列または整数として直接返されます。サンプルコードの最初の例では、$fruits配列から1つのキーが選ばれ、そのキーを使って対応するフルーツ名を表示しているのがわかります。 一方、$numが1より大きい場合、選択された複数のキーが格納された新しい配列として返されます。サンプルコードの2番目の例では、$fruits配列から3つのランダムなキーが配列として返され、それぞれのキーと対応するフルーツ名が順に表示されています。

このように、array_rand関数を使うことで、配列内の情報をランダムに選び出し、柔軟にプログラムで利用することが可能になります。返されたキーを利用して、元の配列から対応する値を取得する仕組みが重要です。

array_rand関数は、配列からランダムな「値」そのものではなく、「キー」を取得する点に特に注意が必要です。引数$numを省略するか1を指定した場合、戻り値はランダムなキーの単一値(文字列または整数)となります。一方、$num1より大きい数を指定すると、戻り値は選ばれた複数のキーを含む配列になります。このように戻り値の型が異なるため、必ず取得した戻り値の型を確認し、is_array()などで適切に処理するように心がけてください。取得したキーを使って元の配列から実際の値を取り出す際は、$array[$key]のようにアクセスします。

PHP array_randで連想配列からランダムなキーを取得する

<?php

/**
 * array_rand関数を使って連想配列からランダムなキーを取得する例。
 * この関数は、配列からランダムに選ばれたキーを1つ、または複数のキーを配列として返します。
 * 主に、複数の選択肢の中からランダムに要素を選びたい場合などに使用されます。
 */
function demonstrateArrayRandForAssociativeArray(): void
{
    // 連想配列の例: ユーザー名とその役割
    $users = [
        'Alice'   => 'Administrator',
        'Bob'     => 'Editor',
        'Charlie' => 'Viewer',
        'David'   => 'Moderator',
        'Eve'     => 'Administrator',
    ];

    echo "--- 元の連想配列 ---\n";
    foreach ($users as $name => $role) {
        echo "- ユーザー名: {$name}, 役割: {$role}\n";
    }
    echo "\n";

    // 1つのランダムなキー(ユーザー名)を取得する例
    // array_rand() の第2引数を省略すると、デフォルトで1つのキーが選択されます。
    // 戻り値は選択されたキー(この場合は文字列)になります。
    $randomUserName = array_rand($users);
    echo "--- 1つのランダムなキーを取得 ---\n";
    echo "ランダムに選ばれたユーザー名: {$randomUserName}\n";
    echo "そのユーザーの役割: {$users[$randomUserName]}\n";
    echo "\n";

    // 複数のランダムなキー(ユーザー名)を取得する例
    // array_rand() の第2引数に、取得したいキーの数を指定します。
    // 戻り値は選択されたキーの配列になります。
    $numberOfUsersToSelect = 2;
    $randomUserNames = array_rand($users, $numberOfUsersToSelect);
    echo "--- {$numberOfUsersToSelect}つのランダムなキーを取得 ---\n";
    echo "ランダムに選ばれたユーザー名たち:\n";
    foreach ($randomUserNames as $name) {
        echo "- ユーザー名: {$name}, 役割: {$users[$name]}\n";
    }
    echo "\n";
}

// 関数を実行して動作を確認します。
demonstrateArrayRandForAssociativeArray();

PHPのarray_rand関数は、指定した配列からランダムにキー(要素を特定するための識別子)を選択する際に使用されます。この関数は、連想配列から特定のユーザー名や商品IDなどをランダムに選び出したい場合に特に便利です。

第一引数には、キーをランダムに取得したい対象の配列を指定します。これは連想配列でも通常の数値インデックス配列でも構いません。第二引数には、取得したいキーのを整数で指定します。この引数を省略した場合、デフォルトで1つのキーが選択されます。

戻り値は、第二引数の指定によって異なります。もし1つのキーだけを取得する場合(第二引数を省略するか1を指定した場合)、ランダムに選ばれた単一のキーが文字列または整数の型で返されます。一方、複数のキーを取得する数(2以上)を指定した場合は、選ばれた複数のキーが格納された配列が戻り値となります。

提供されたサンプルコードでは、まずユーザー名とその役割を示す連想配列$usersを用意しています。次に、array_rand($users)として第二引数を省略し、ランダムなユーザー名を一つ取得する方法を示しています。これにより、選択されたユーザー名とその役割を表示しています。続いて、array_rand($users, 2)のように第二引数に「2」を指定し、二つのランダムなユーザー名を配列として取得し、それぞれのユーザー名と役割を表示する例が示されています。このように、用途に応じて単一または複数のキーを効率的に取得できるのがarray_rand関数の特徴です。

array_rand関数を利用する際は、戻り値の型が取得するキーの数によって異なる点に最も注意してください。第2引数を省略するか1を指定した場合、関数はランダムに選ばれた「キーそのもの」(文字列または整数)を直接返します。しかし、第2引数に2以上の数を指定すると、ランダムに選ばれた「キーの配列」が返されます。この型の違いを認識せず、常に配列として扱おうとすると、意図しないエラーや挙動の原因となる可能性があります。この関数は配列の「値」ではなく「キー」を返しますので、対応する値が必要な場合は、返されたキーを使用して元の配列から値を取得してください。また、空の配列を渡すと警告が発生しnullが返されるため、配列が空でないか確認することも大切です。

【PHP8.x】array_rand関数の使い方 | いっしー@Webエンジニア