![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
PHPの勉強を始めた初心者です。
submitボタンを押すたびに数字を生成するビンゴプログラムを作成したいと思うのですがわからずに悩んでいます。
どなたかご教授お願い致します。
ポイントは
1~75のランダムな整数を一つずつ表示する
同じ整数は二度とでない
それまでに出た整数は確認できるように表示しておく
整数をすべてとりだしたら”ビンゴは終了しました”と表示させる
リセットボタンを作る
以上です。
下記は、私が途中まで書いているものです。
<?php
print "<form method='POST'>";
$bingo = mt_rand(1,75);
$num = $_POST['num'];
print "<input type='hidden' name='num[]' value='$bingo'>";
print "<font size='50px'>".$bingo."</font>"."<br>";
print "<input type='submit' value='ビンゴ'>";
print "</form>";
?>
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんな感じでは如何でしょうか
<?php
if (isset($_POST['seed'])) $seed=$_POST['seed'];
else $seed=(float)microtime() * 1000000;
if (isset($_POST['order'])) $order=$_POST['order']+1;
else $order=1;
$numbers = range(1, 75);
srand($seed);
shuffle($numbers);
print "<font size='50px'>".$numbers[$order-1]."</font>"."<br>";
print "<form method='POST'>";
if ($order<75){
print "<input type='hidden' name='seed' value='$seed'>";
print "<input type='hidden' name='order' value='$order'>";
print "<input type='submit' value='ビンゴ'>";
} else {
print "ビンゴは終了しました<br>\n";
print "<input type='submit' value='リセット'>";
}
print "</form>";
echo "既出番号\n";
for($i=0;$i<$order-1;$i++) {
echo "$numbers[$i] ";
}
?>
No.1
- 回答日時:
■ランダムな数値の取り出し方に関して
まず、mt_rand関数だと、一度取り出した値を含めないで次の値を出力することが出来ません。
今回は、1~75番までが含まれている配列を作成して、その中から値を取り出してはいかがでしょう。
<?php
$bingo_array = range(1, 75); //range関数は、与えられた引数の一番目から二番目までの配列を作ります。
shuffle($bingo_array); //shuffle関数は、配列をシャッフルしてランダムに並び替えます。
//値を取り出すときにはarray_shiftを使う
//そうすると取り出された値が返り値に、そして配列の中からは取り出された値が削除される。
$result = array_shift($bingo_array);
?>
■フォームのSUBMITボタンに関して
とりあえず、<form method="POST">で示されている様に、
このプログラムにPOSTメソッドでアクセスされたときと、そうでない時で切り分ければ、事が少し簡単になります。
POSTでアクセスされなかった時には配列を初期化して、
POSTでアクセスされた時には、すでにシャッフルされている値を処理する。
<?php
//環境変数にアクセスされたときのメソッドが渡されているので、
//これで判断できる
if($_SERVER['REQUEST_METHOD'] == 'POST'){
//POSTされていたら、その処理を
}else{
//そうでなかったら初期化処理を。
}
?>
■hiddenに与える値
最初に書いたとおり、配列で保持しておくので、そのままではhiddenに保存出来ません。
一度配列を、文字列に変換して保持しておくことにするのが今回は手軽です。
<?php
$hidden = serialize($bingo_array); //serialize関数でPHPの変数の中身を文字列に変換できる。
//ただし、HTML中に含めたくない値も含むので、
$hidden = htmlspecialchars($hidden); //といった感じでエスケープもチャンとする。
//もとに戻したい場合は、
$bingo_array = unserialize($_POST['num']); //unserialize関数を使う。
?>
■リセットボタンについて
上記で書いた、array_shiftで値を取り出しきったかどうかを、empty関数などで確認して、
すべて取り切っていたら、submitボタンを非表示にして、代わりにリセットボタンを出力するように振り分ける感じでしょうか。
リセットボタンは、javascriptか何かで、今回のプログラムにGETメソッドでリダイレクトかけるなり、
リセットボタンを普通のリンクタグにして、同じプログラムにリンクすれば、すべて初期化されるかなと。
一応、必要そうな要素は記述しました。
如何でしょうか。
ご返信ありがとうございます。
数字の出し方などとても参考になりました!
ですが、出た数字をhiddenに保存させて重複させないというところがうまくいきません。。
非常にお手数ですがもう少し詳しく教えていただけないでしょうか、、
お手数をお掛けして申し訳ありません、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
URLのサブドメインとドメイン部...
-
ネストが深い時のforeachはどう...
-
file_existsでファイル名の部分...
-
PHPのカッコ[ ]の使い方について
-
postgresql関数をつかったレコ...
-
$_POSTを一括してサニタイズし...
-
チェックボックス複数選択 mys...
-
foreachのなかで次のキーを参照...
-
mb_ereg_replaceについて
-
String だと「 ByRef引数の型が...
-
配列の何番目かを出力したい
-
正規表現でパターンマッチした...
-
ファイルから指定行数分だけ読...
-
配列一致(要素順番は違うが内容...
-
smarty 同じ要素内で改行
-
プルダウンメニューでCSVデータ...
-
global 変数を使わないサンプル...
-
Doctrine(ORM)での複数行Insert
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
$_SESSIONに二次元配列を使える...
-
file_existsでファイル名の部分...
-
String だと「 ByRef引数の型が...
-
foreachのなかで次のキーを参照...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
PHPのPOSTでの半角スペース
-
セッション配列の取得の仕方
-
PHPにてクラスを配列にすること...
-
配列一致(要素順番は違うが内容...
-
PHP 多次元配列変数のデータ受...
-
漢字のソートについて
-
unset使用時の利点
-
OCI で、SELECT結果行数を取得...
-
postgresql関数をつかったレコ...
-
あいまい検索
-
配列をmysqlに保存
-
チェックボックス複数選択 mys...
-
タブ区切りのデータでnullのデ...
おすすめ情報