PHPで重複しない乱数を作る一番簡単な方法

例えば1~10までで重複なしで10個の数を作りたい

こういう場合、ただ乱数を使うだけだと数が重複してしまいますよね。

ですが完全に重複しない乱数を作るのは以外と難しくありません。

ここではPHPでそのような重複なしの乱数を作る方法について紹介します。

重複しない乱数を作る方法を考えてみる

まずPHPで乱数を作る場合、次でまとめたようにrand関数またはmt_rand関数を使います。

どちらの関数もある範囲内のランダムな整数を返す関数です。

 

例えば 2 ~ 5 までの乱数を発生させるなら次のようなコード

この関数を使って重複なしの整数を作りたいわけです。

例えば 1 ~ 10までで重複なしの整数を作るならこんな感じ

こういう風に同じ数が二度以上出てきてはいけません。

 

では具体的にどうすればいいか考えてみると一番簡単なのは配列を使うことですね。

つまり次のような手順で重複チェックしながら乱数列を作るということ

  1. ある範囲内で1つ乱数を作る
  2. 配列にその乱数が含まれてないか調べる
  3. 含まれてないなら配列の最後に追加
  4. 以下同じことの繰り返し・・・

こんな感じでやれば確実に重複なしの乱数列が作れます。

では次で具体的なコード例について紹介しましょう。

重複なしの乱数を作るコード例

ここでは 1~10までの間で重複なしの乱数を作りたいと思います。

その手順とコード例は次の通り

 

まず次のように乱数を入れる配列 $rands  を宣言

そしてここでは $min  を最小値、 $max  を最大値を表す変数として使います。

 

そうしたら後はループ内で乱数の重複チェックをしていくだけ

まず $min  から $max  までの間でとりあえずループ

そしてwhileループ内でコメントに書いた通りに重複チェックしています。

 

ちなみに全体のコードを載せると次の通り

これで完全に重複しない乱数列が作れるようになります。

もし乱数の範囲を変えたいなら $min  $max  の値を変えればいいだけです。

 

ちなみにこのコードを使って何回か乱数列を作成すると次の結果になりました。

どの乱数列も1~10までが被ることなく並んでいます。

ここまでのまとめ

以上PHPで重複なしの乱数を作る方法についてでした。

重複チェックと同時に乱数列も手に入るので、まあまあ効率はいいかなと思います。

もっと効率のいい方法もあるかもしれませんが、ここではこの方法を紹介しました。