PHPで乱数を生成する5つのステップ!初心者向けガイド – Japanシーモア

【簡単解説】PHPで乱数を生成する5つのステップ!初心者向けガイド

PHPで乱数を生成する方法を示すイラストPHP
この記事は約8分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPで乱数を生成する方法について詳しく解説します。

乱数生成は、ウェブアプリケーションの多くの部分で使用され、パスワード生成、一時的なコード生成、ランダムな要素の選択など、さまざまな用途があります。

●PHPとは

PHPは、ウェブ開発に広く使用されるサーバーサイドのスクリプト言語です。

PHPは、HTMLを動的に生成する能力や、データベースとの連携など、ウェブアプリケーションの開発に必要な機能を提供しています。

●乱数生成とは

乱数生成とは、予測不可能な数値を生成するプロセスのことを指します。

乱数は、ゲーム、暗号化、シミュレーション、確率的アルゴリズムなど、多くのアプリケーションで使用されます。

●PHPでの乱数生成の基本

PHPでは、乱数を生成するためのいくつかの関数が提供されています。

その中でも最も一般的に使用されるのがrand関数とmt_rand関数です。

○rand関数の使用

rand関数は、指定された範囲内でランダムな整数を生成します。

1から10までのランダムな整数を生成する例を紹介します。

$randomNumber = rand(1, 10);
echo $randomNumber;

このコードでは、rand関数を使って1から10までのランダムな整数を生成しています。

この例では、生成された乱数を$randomNumber変数に格納し、その値を出力しています。

○mt_rand関数の使用

mt_rand関数も、rand関数と同様にランダムな整数を生成します。

しかし、mt_rand関数は、メルセンヌ・ツイスタアルゴリズムを使用しており、rand関数よりも高速で、より良い乱数特性を持っています。

mt_rand関数を使用した例を紹介します。

$randomNumber = mt_rand(1, 10);
echo $randomNumber;

このコードでは、mt_rand関数を使って1から10までのランダムな整数を生成しています。

この例では、生成された乱数を$randomNumber変数に格納し、その値を出力しています。

●乱数生成の詳細な使い方

次に、乱数生成の詳細な使い方について見ていきましょう。

●乱数生成の詳細な使い方

乱数生成の詳細な使い方を理解するために、いくつかの具体的なサンプルコードを見てみましょう。

○サンプルコード1:rand関数の基本的な使い方

このコードでは、rand関数を使って1から100までのランダムな整数を生成しています。

この例では、生成された乱数を$randomNumber変数に格納し、その値を出力しています。

$randomNumber = rand(1, 100);
echo $randomNumber;

○サンプルコード2:mt_rand関数の基本的な使い方

このコードでは、mt_rand関数を使って1から100までのランダムな整数を生成しています。

この例では、生成された乱数を$randomNumber変数に格納し、その値を出力しています。

$randomNumber = mt_rand(1, 100);
echo $randomNumber;

○サンプルコード3:範囲を指定した乱数生成

このコードでは、rand関数を使って指定した範囲内(この例では10から20)のランダムな整数を生成しています。

この例では、生成された乱数を$randomNumber変数に格納し、その値を出力しています。

$min = 10;
$max = 20;
$randomNumber = rand($min, $max);
echo $randomNumber;

●乱数生成の応用例

乱数生成は、さまざまな場面で利用できます。いくつかの具体的な応用例を紹介します。

○サンプルコード4:乱数を使った配列のシャッフル

このコードでは、shuffle関数を使って配列の要素をランダムに並べ替えています。

この例では、1から5までの数値が格納された配列をランダムに並べ替え、その結果を出力しています。

$array = array(1, 2, 3, 4, 5);
shuffle($array);
print_r($array);

○サンプルコード5:乱数を使ったパスワード生成

このコードでは、rand関数を使ってランダムなパスワードを生成しています。

この例では、指定した長さ(この例では8)のパスワードを生成し、その値を出力しています。

$length = 8;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$password = '';
for ($i = 0; $i < $length; $i++) {
    $password .= $characters[rand(0, $charactersLength - 1)];
}
echo $password;

○サンプルコード6:乱数を使ったクイズ問題の選択

このコードでは、rand関数を使ってクイズの問題をランダムに選択しています。

この例では、配列に格納された問題からランダムに1つを選び、その問題を出力しています。

$questions = array('問題1', '問題2', '問題3', '問題4', '問題5');
$randomQuestionIndex = rand(0, count($questions) - 1);
echo $questions[$randomQuestionIndex];

●乱数生成の注意点と対処法

乱数生成にはシード値という重要な要素が関わっています。

○シード値とは

シード値とは、乱数生成の初期値のことを指します。乱数生成器は、このシード値を基にして乱数を生成します。

同じシード値を使用すれば、同じ乱数の列が生成されます。

これは、乱数生成器が実際には決定的なアルゴリズムに基づいて動作しているためです。

○シード値の初期化

PHPでは、乱数生成器のシード値は自動的に初期化されます。

しかし、特定のシード値を使用して同じ乱数の列を再現したい場合は、mt_srand関数を使用してシード値を手動で設定することができます。

mt_srand(123);
echo mt_rand(); // これは常に同じ値を出力します

このコードでは、mt_srand関数を使ってシード値を123に設定しています。

その後、mt_rand関数を使って乱数を生成しています。この例では、シード値が同じなので、mt_rand関数は常に同じ値を出力します。

●乱数生成のカスタマイズ方法

乱数生成の方法はカスタマイズすることが可能です。

特定の範囲の乱数を生成する方法と、特定の分布に従う乱数を生成する方法を紹介します。

○サンプルコード7:特定の範囲の乱数生成

このコードでは、mt_rand関数を使って10から50までの範囲内のランダムな整数を生成しています。

この例では、生成された乱数を$randomNumber変数に格納し、その値を出力しています。

$min = 10;
$max = 50;
$randomNumber = mt_rand($min, $max);
echo $randomNumber;

○サンプルコード8:特定の分布に従う乱数生成

このコードでは、各数値が選ばれる確率を重み付けによって制御しています。

この例では、数値1から5までがあり、それぞれの数値が選ばれる確率はその数値自体と同じです。

つまり、数値5が選ばれる確率は最も高く、数値1が選ばれる確率は最も低いです。

$numbers = array(1, 2, 3, 4, 5);
$weights = array(1, 2, 3, 4, 5);
$sumWeights = array_sum($weights);
$rand = mt_rand(1, $sumWeights);
foreach ($numbers as $index => $number) {
    $rand -= $weights[$index];
    if ($rand <= 0) {
        echo $number;
        break;
    }
}

●PHP8.2の乱数生成器について

PHP8.2では、新しい乱数生成器が導入されました。

この新しい乱数生成器は、より強力な乱数生成能力を持っています。

○新しい乱数生成器の紹介

PHP8.2の新しい乱数生成器は、random_int関数とrandom_bytes関数を提供します。

random_int関数は指定した範囲内の乱数を生成し、random_bytes関数は指定した長さのランダムなバイト列を生成します。

○サンプルコード9:PHP8.2の乱数生成器の使用

このコードでは、random_int関数を使って0から100までの範囲内のランダムな整数を生成し、random_bytes関数を使って長さ10のランダムなバイト列を生成しています。

この例では、生成された乱数とバイト列をそれぞれ出力しています。

$randomNumber = random_int(0, 100);
echo $randomNumber;

$randomBytes = random_bytes(10);
echo bin2hex($randomBytes);

まとめ

この記事では、PHPでの乱数生成について詳しく解説しました。

乱数生成は、ゲームの結果を決定したり、ランダムなパスワードを生成したりするためによく使用されます。

PHPには、乱数を生成するためのいくつかの関数が用意されており、それぞれに特性と使用方法があります。

また、乱数生成のカスタマイズ方法や新しい乱数生成器についても紹介しました。

これらの知識を活用して、PHPでの乱数生成をより理解し、効果的に利用してください。