特定の範囲の数字から、数字を「一定個数」「重複無し」でランダムにピックアップするPHPスクリプト。

ロト6にはクイックピックという自動で選出してくれる機能があるけれど、クイックピックにしてしまうと番号が気に入らなくても受け入れないといけないし、かといって自分で数字を選択するのも面倒になってきたので、ランダムな数字を自動生成して、候補の数字組み合わせ中から「気に入った組み合わせだけを買う方法」とかもアリかなー・・・とか考えた。(探せばその手のアプリやらサービスやらあるのだろうけれど。)

というわけで、以下、ロト6基準で1-43の範囲から数値を重複無しで6個抽出するPHPスクリプト。

パターン1:重複無しの数字が6個揃うまでループさせる方法

mt_randとかでも良いんだろうけれど、PHP7から追加されたrandom_intを使ってみる。

$i = 1;
$number_arr = array();
//重複無しの数字が6個揃うまでループ
do {
      $rand = random_int(1, 43);
      if (!in_array($rand, $number_arr)) {
          array_push($number_arr, $rand);
          $i++;
       }
} while ($i <= 6);
//見やすいようにソート
asort($number_arr);
//出力
foreach($number_arr as $num) echo $num.'/';

試しに10回回してみる

5/9/12/14/22/26/
19/23/30/33/36/41/
5/16/19/26/34/43/
10/13/14/39/40/42/
14/16/30/32/34/42/
7/18/30/35/41/42/
8/18/28/29/37/43/
6/7/9/24/42/43/
12/22/23/31/38/39/
6/10/22/31/33/38/

パターン2:1-43までの数字を含む配列を作成して並び替えた上で6個切り取る方法


//1-43までの数字を全て含む配列を作成
$seed_arr = range(1, 43);
//並び替え
shuffle($seed_arr);
//頭から6個目までの数字を切り取る
$number_arr = array_slice($seed_arr, 0, 6);
//見やすいようにソート
asort($number_arr);
//出力
foreach ($number_arr as $num) echo $num . '/';

試しに10回回してみる

5/18/19/25/29/35/
11/14/21/23/27/32/
2/6/23/30/33/38/
4/7/10/17/38/42/
5/7/15/25/26/30/
13/23/27/37/39/41/
3/14/15/33/35/42/
2/9/15/22/23/26/
11/17/24/26/35/40/
4/21/22/29/31/36/

というわけで…

当たらないかなー…ロト6。
過去当選番号をまとめてデータとして更新し続けている方とかいらっしゃるようなのでそれらのデータを使わせて頂いてコネコネしてみるのもちょっと面白そうだと思ってきている。

Leave a Reply

Your email address will not be published.