phpでロト6、ロト7の番号生成プログラムをつくってみる

当たると大きい、数字選択式宝くじのロト6とロト7。

「ロト6」は、1~43の43個の数字の中から異なる6個の数字を選んで購入する「数字選択式宝くじ」で、1等の当せん金は最高2億円。キャリーオーバーが発生した場合は、1等の当せん金は最高6億円となります。価格は1口200円。

一方の「ロト7(ロトセブン)」は、1~37の37個の数字の中から、異なる7個の数字を選んで購入する同じく「数字選択式宝くじ」で、1等の当せん金は最高4億円。ロト6と同じく、当せん金の繰り越しが行われる「キャリーオーバー制」を採用していて、キャリーオーバーが発生した場合は、1等の当せん金は最高10億円となります。価格は1口300円。

ロトやナンバーズのような数字選択式宝くじの魅力は、自分で選んだ数字で抽選に臨めるところでしょう。ジャンボ宝くじのような高額当選金のくじがありますが、これらは買う場所や時間などによって運が決まってしまいます。

数字の選び方は人それぞれ、家族の誕生日や自分のラッキー数字を組み合わせて選んでる人も多いと思います。自分で数字を選ぶとは言っても、その組み合わせは膨大な数になります。数字選びで悩むこともあるのではないでしょうか。そんな時はコンピュータに数字を生成させて、その中から「これは!」と思うものを選択するというのも一つの方法です。

今回は、PHPプログラムの学習も兼ねてphpでロト6とロト7の番号生成プログラムに挑戦してみました。

完成したものはこちらになります。

phpでロト6とロト7の番号を生成する

お約束ですが、高額当選番号を予想したり当選をお約束するものではありません。自己責任でお買い求めください。

プログラムの条件・方法

1,条件

上述したように、「ロト6は1~43の43個の数字の中から異なる6個の数字を選ぶ」であり、「ロト7は1~37の37個の数字の中から異なる7個の数字を選ぶ」ということです。この条件を満たすものであればいいわけで、その方法はいくつもあると思いますが、今回は、phpの配列をシャッフルする「shuffle関数」と、配列の任意の位置から値を抽出する「array_slice関数」を使って、ロト6、ロト7の番号を生成するプログラムをつくりました。

2,方法

おおよそ次のような順番で生成・表示する方法を採ります

  1. 数値を入力した配列(ロト6は1~43、ロト7は1~37)を用意する
  2. その配列をシャッフルする(順番をばらばらにする)
  3. シャッフルした配列の最初からロト6の場合は6個、ロト7の場合は7個の数字を取り出す
  4. 取り出した数字を並び替えて表示する

基本プログラム

まずは基本的な動作を確認するために、1~7までの数字を入れた配列を用意し上記の方法で4個の数字を取り出す実験プログラムをつくってみます。

<?php

$_NumArray = array();	        // 基本データ用配列の宣言

for($i=1; $i<=7; $i++) {    // 基本データ用配列に1から7までの数字を入れる
  array_push($_NumArray,$i);
}

echo "1,基本データ用配列の要素を整形して表示しています";
print "<pre>";print_r($_NumArray);print "</pre>";
  	
shuffle($_NumArray);	// シャッフルする
	
echo "<br>2,シャッフル後の配列の要素を整形して表示しています";
print "<pre>";print_r($_NumArray);print "</pre>";

// シャッフル後の配列の要素を前から4個取り出します
$_ChoiceArray = array_slice($_NumArray, 0,4);
	
echo "<br>3,シャッフルした配列の要素を前から4個取り出し表示しています" ;
print "<pre>";print_r($_ChoiceArray);print "</pre>";

sort($_ChoiceArray);	// ソートする(順番に並び替え)

echo "<br>4,取り出した要素を順番に並び替えて表示しています";	
print "<pre>";print_r($_ChoiceArray);print "</pre>";

?>

このデモはこちらになります

loto6・7番号生成 基本デモ01

loto6の番号生成

上記のデモプログラムを基にloto6の番号生成をするプログラムをつくってみます。デモ01ではシャッフル回数は1回でしたが、今回はシャッフル回数を増やしてみます。シャッフル回数は「rand関数」を使って指定した範囲内でランダムに取得し、その回数シャッフルしてみます。

<?php

$_NumArray	=	array();	// 基本データ用配列の宣言

$_ShuffMin	=	12;		// シャッフルの最低回数
$_ShuffMax	=	48;		// シャッフルの最高回数


for($i=1; $i<=43; $i++) {	// 基本データ1から43までの数字を配列に入れる
	array_push($_NumArray,$i);
}

echo "1,loto6用に1から43までの数字を要素とする配列を準備します";
print "<pre>";print_r($_NumArray);print "</pre>";

$_ShuffNum = rand($_ShuffMin,$_ShuffMax);	// シャッフル回数を取得します

echo "<br>2,シャッフル回数をrand関数でランダムに取得します";
echo "<br>シャッフル回数は".$_ShuffNum ."回";

for($k=0; $k<$_ShuffNum; $k++) {	// シャッフル回数分シャッフルする
  shuffle($_NumArray);
}

echo "<br><br><br>3,シャッフル後の配列の要素を表示しています";
print "<pre>";print_r($_NumArray);print "</pre>";

// シャッフル後の配列の要素を前から6個取り出します
$_ChoiceArray = array_slice($_NumArray, 0,6);	
	
echo "<br>4,シャッフルした配列の要素の前から6個を取り出し、表示しています" ;
 print "<pre>";print_r($_ChoiceArray);print "</pre>";

sort($_ChoiceArray);	// ソートする

echo "<br>5,取り出した要素を順番に並び替えて表示しています";
echo "<br>これがランダムに生成されたloto6の番号となります";
print "<pre>";print_r($_ChoiceArray);print "</pre>";

?>

このデモはこちらになります

loto6・7番号生成 基本デモ02

loto7の番号生成

上記のloto6のプログラムを基にloto7の番号生成プログラムをつくってみます。

今回は、番号の取得を関数化し、取得数も指定できるようにします。

 <?php

$_ShuffMin = 12;	// シャッフルの最低回数
$_ShuffMax = 48;	// シャッフルの最高回数

// --------function start---------------------------------------------------------
function get_loto7_numbers($GetNum )
{
  global $_ShuffMin,$_ShuffMax; // 関数外の変数を参照できるようにglobal指定しています
	
  $_NumArray	=	array();	// 基本データ用配列の宣言
  $_Loto7Array	=	array();	// 番号格納用配列の宣言

  for($i=1; $i<=37; $i++) {	// roto7用に1から37までの数字を要素とする配列を準備します
	array_push($_NumArray,$i);
  }
	
  for($j=0;$j<$GetNum;$j++){	// 取得個数までfor文でループさせます

    $_ShuffNum = rand($_ShuffMin,$_ShuffMax);	// シャッフル回数をランダムに取得します
   for($k=0; $k<$_ShuffNum; $k++) {	// シャッフル回数分シャッフルします
     shuffle($_NumArray);
   }

   $_ChoiceArray = array_slice($_NumArray, 0,7); // シャッフル後の配列の要素を前から7個取り出します
   sort($_ChoiceArray);			// ソートします

   array_push($_Loto7Array,$_ChoiceArray);	// 番号格納用配列に取得した番号を入れます

   $_ChoiceArray =array(); // 配列を初期化します
 }

 return($_Loto7Array); // 選んだ番号を入れた配列を返します

}
// --------function end-----------------------------------------------------------


 $_Array7 = get_loto7_numbers(3); // 関数に取得数3を指定して番号を3個取得します

 // 整形して表示します
 print "<pre>";print_r($_Array7);print "</pre>";

 // foreachで値を取り出して番号を表示します
 foreach($_Array7 as $loto7){ 
   foreach($loto7 as $num){
    print ("$num ");
   }
   print ("<br>");
 }

?>

このデモはこちらになります

loto6・7番号生成 基本デモ03

アイキャッチ画像・トップ画像
jacqueline macouによるPixabayからの画像