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の番号生成プログラムに挑戦してみました。
完成したものはこちらになります。
お約束ですが、高額当選番号を予想したり当選をお約束するものではありません。自己責任でお買い求めください。
プログラムの条件・方法
1,条件
上述したように、「ロト6は1~43の43個の数字の中から異なる6個の数字を選ぶ」であり、「ロト7は1~37の37個の数字の中から異なる7個の数字を選ぶ」ということです。この条件を満たすものであればいいわけで、その方法はいくつもあると思いますが、今回は、phpの配列をシャッフルする「shuffle関数」と、配列の任意の位置から値を抽出する「array_slice関数」を使って、ロト6、ロト7の番号を生成するプログラムをつくりました。
2,方法
おおよそ次のような順番で生成・表示する方法を採ります
- 数値を入力した配列(ロト6は1~43、ロト7は1~37)を用意する
- その配列をシャッフルする(順番をばらばらにする)
- シャッフルした配列の最初からロト6の場合は6個、ロト7の場合は7個の数字を取り出す
- 取り出した数字を並び替えて表示する
基本プログラム
まずは基本的な動作を確認するために、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の番号生成
上記のデモプログラムを基に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>";
?>
このデモはこちらになります
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>");
}
?>
このデモはこちらになります
アイキャッチ画像・トップ画像
jacqueline macouによるPixabayからの画像