Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. max() / min() / rand() / random_int()

max() / min() / rand() / random_int()対応: PHP 4(2000)

最大値・最小値の取得や乱数の生成を行います。配列や複数の引数から極値を求めたり、セキュリティ用途に適した暗号学的乱数を生成できます。

構文
// 最大値を返します。引数に配列または複数の値を指定できます。
max($value1, $value2, ...);

// 最小値を返します。引数に配列または複数の値を指定できます。
min($value1, $value2, ...);

// 擬似乱数を生成します。
rand($min, $max);

// メルセンヌ・ツイスタで擬似乱数を生成します。
mt_rand($min, $max);

// 暗号学的に安全な乱数を生成します。
random_int($min, $max);
関数一覧
関数概要
max($value1, $value2, ...)引数の中から最大の値を返します。配列を渡した場合は配列内の最大値を返します。
min($value1, $value2, ...)引数の中から最小の値を返します。配列を渡した場合は配列内の最小値を返します。
rand($min, $max)指定範囲の擬似乱数を整数で返します。引数を省略すると0から『getrandmax()』までの値を返します。
mt_rand($min, $max)メルセンヌ・ツイスタ法による擬似乱数を返します。『rand()』より高品質ですが、暗号用途には適しません。
random_int($min, $max)暗号学的に安全な整数乱数を返します。PHP7で追加されました。トークン生成やパスワードリセットなどセキュリティが求められる場面で使用します。
戻り値

『max()』と『min()』は引数の中で最大または最小の値をそのままの型で返します。乱数関数はすべて指定範囲内の整数を返します。『random_int()』は生成に失敗した場合に例外をスローします。

サンプルコード
<?php
// max() で最大値を取得します。
echo max(10, 25, 3); // 『25』と出力されます。
echo max(-5, -1, -10); // 『-1』と出力されます。

// 配列から最大値・最小値を取得します。
$scores = [85, 92, 78, 96, 88];
echo max($scores); // 『96』と出力されます。
echo min($scores); // 『78』と出力されます。

// min() で値の下限を設定する実用例
$quantity = -3;
$safe_quantity = max(0, $quantity); // 負の数を0に補正して『0』と出力されます。
echo $safe_quantity;

// 値を範囲内に収める実用例
$page = 150;
$page = max(1, min($page, 100)); // 1〜100の範囲に収めて『100』と出力されます。
echo $page;

// rand() で擬似乱数を生成します。
echo rand(1, 6); // 1〜6のいずれかの整数が出力されます。

// mt_rand() はメルセンヌ・ツイスタ法を使用します。
echo mt_rand(1, 100); // 1〜100のいずれかの整数が出力されます。

// random_int() で暗号学的に安全な乱数を生成します。
echo random_int(100000, 999999); // 6桁の安全なランダム数値が出力されます。

// セキュアなトークン生成の実用例
$token = random_int(0, PHP_INT_MAX);
echo $token; // 予測不可能なランダムな整数が出力されます。
概要

『max()』と『min()』は配列や複数の引数から極値を求める関数です。値の上限・下限を設定する場面で頻繁に使われ、『max(0, $value)』で負の数を0に補正したり、『max(1, min($value, 100))』で値を範囲内に収めるパターンが定番です。

『rand()』と『mt_rand()』はセキュリティ用途には適しません。パスワードリセットトークンやCSRFトークンなど予測されてはならない値を生成する場合は、必ず『random_int()』を使用してください。『random_int()』はオペレーティングシステムの暗号学的乱数生成器を使用するため、出力の予測が計算上不可能です。

文字列のランダム生成にはバイト列を扱う『random_bytes()』も利用できます。数値の丸め処理には『round() / ceil() / floor()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。