PHPで乱数(ランダムな値)を取得する方法について書いています。
乱数を取得するには、下記の関数を使うことができます。
・rand
2つの関数を解説した後に、違いについて書いています。
載せているサンプルコードはPHPのバージョン8.1.12で動作を確認しました。
mt_randで乱数を取得する
mt_rand関数で乱数を取得します。
例えば、下記のように使って、ランダムな値を取得することができます。
<?php
$randomNumber = mt_rand();
echo $randomNumber; // 430175508
mt_rand関数を呼び出して、乱数を取得しました。
出力すると「430175508
」となりました。実行するごとに、ランダムな値が取得されます。
このように、引数を渡さずにmt_rand関数を呼び出すと、0から「乱数の最大値」までの値が返ってきます。
「乱数値の最大値」はmt_getrandmax関数を呼び出すと、確認することができます。
筆者が使っている環境では、最大値は「2147483647
」でした。
<?php
echo mt_getrandmax(); // 2147483647
引数を渡して、乱数を取得する
最小値と最大値を渡して、渡した引数の範囲で乱数を取得する方法です。
こちらの使い方をする方が多いかと思います。
例えば、下記のように使うと、1以上・10以下のランダム値を取得できます。
<?php
$randomNumber = mt_rand(1, 10);
echo $randomNumber; // 7
mt_rand関数に引数を渡して、乱数を取得しています。
第1引数に最小値、第2引数に最大値を渡します。
こうすることで、最小値以上で最大値以下の乱数を取得できます。
実行すると「7」が取得できました。実行するたびに、0から10の間でランダム値が取得されます。
引数を渡すときには2つ渡す
引数を渡すときには、最小値と最大値が必須になります。
ひとつだけしか渡さなかった場合にはエラーが発生します。
<?php
$randomNumber = mt_rand(10); // error
このプログラムを実行すると、下記のようにArgumentCountError
が発生します。
Fatal error: Uncaught ArgumentCountError: mt_rand() expects exactly 2 arguments, 1 given in xxx.php:12
引数と戻り値まとめ
mt_rand関数の引数と戻り値をまとめました。
引数
引数を渡さなかったときには、0から「乱数の最大値」までの乱数が取得できました。
引数を渡す場合には、ふたつ渡す必要があります。
第1引数に最小値、第2引数に最大値を渡すと、最小値以上で最大値以下の乱数が取得できます。
戻り値
関数の戻り値として、乱数が返ってきます。
返ってくる乱数は数値型になっています。
$randomNumber = mt_rand(1, 10);
var_dump($randomNumber); // int(3)
randで乱数を取得する
rand関数で乱数を取得します。
mt_rand関数と同じように使うことができます。
<?php
$randomNumber = rand();
echo $randomNumber; // 884730052
引数を渡さずにrand関数を使うと、0から「乱数の最大値」までのランダムな値が取得できます。
実行すると、今回は「884730052
」が取得できました。
rand関数の「乱数の最大値」はgetrandmax関数で取得することができます。
筆者の環境で確認すると、最大値は「2147483647
」でした。(mt_randで使える最大値と同じでした)
<?php
echo getrandmax(); // 2147483647
引数を渡して、乱数を取得する
mt_rand関数と同じように、2つの引数を指定して、乱数を取得することができます。
下記のように使うことで、取得することができます。
<?php
$randomNumber = rand(5, 15);
echo $randomNumber; // 12
rand関数で乱数を取得しました。
第1引数に最小値、第2引数に最大値を渡します。
最小値に5を指定して、最大値に15を指定しているので、0から15の間で乱数が取得されます。
値を出力すると「12」が出力されました。
値は実行するたびに変わります。
mt_randとrandの違いについて
mt_rand関数とrand関数の違いです。
mt_rand関数の方が新しく、rand関数は古いとのことです。
mt_rand関数の方がrand関数より4倍以上高速に乱数を生成してくれます。
そのため、乱数を作るときにはmt_rand関数を使うと良いです。
詳細は公式のこちらのドキュメントに書いてあります。
終わりに
今回はPHPで乱数を取得する方法について書きました。
記事の内容をまとめると、下記のようになります。
・引数を渡さない場合には0から「乱数の最大値」までのランダム値が取得できる。
・最小値と最大値を渡すことで、最小値以上で最大値以下の乱数が取得できる。
・mt_rand関数の方が処理が早いため、基本的にはこちらを使う。
コメント