PHPで乱数を取得する方法!(mt_rand/rand)

PHP

PHPで乱数(ランダムな値)を取得する方法について書いています。
乱数を取得するには、下記の関数を使うことができます。

・mt_rand
・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で乱数を取得する方法について書きました。
記事の内容をまとめると、下記のようになります。

・乱数を取得したいときにはmt_rand関数またはrand関数を使う。
・引数を渡さない場合には0から「乱数の最大値」までのランダム値が取得できる。
・最小値と最大値を渡すことで、最小値以上で最大値以下の乱数が取得できる。
・mt_rand関数の方が処理が早いため、基本的にはこちらを使う。

コメント

タイトルとURLをコピーしました