PHPにてクイズアプリを制作しています。
問題が表示され正解か不正解かの判定をし、次の問題の表示を表示するところまでは作成しております。
問題を変数 n で管理しており、0~9 までのいずれかの数字が入力されると対応した問題が出題されるのですが、
nに対して 0~9 で なおかつ10回の処理以内に重複をしないようにするにはどうすればよいでしょうか。
下記のURLを参照にPHPを組んだのですが
https://pisuke-code.com/php-create-non-overlap-randoms/
/** 乱数用配列 /
$rands = [];
/* 乱数の範囲は1~10 */
$min = 1; $max = 10;
for($i = $min; $i <= $max; $i++){
while(true){
/** 一時的な乱数を作成 */
$tmp = mt_rand($min, $max);
/* * 乱数配列に含まれているならwhile続行、 * 含まれてないなら配列に代入してbreak */ if( ! in_array( $tmp, $rands ) ){ array_push( $rands, $tmp ); break; }
}
}
$randsを$nに変換してもエラーがでてしまいます。
また不正防止のために、ブラウザバックをしたときにエラーもしくは特定のページに飛ぶようにしたいのですが、
PHPではなくjavascriptでしか方法はないのでしょうか。
問題コード
<?php $quiz = [ ['Q'=>'水樹奈々さんの血液型は?', //問題文 'A'=>['A型','B型','O型','AB型'], //回答群 'C'=>2 //正解のエントリー ], ['Q'=>'水樹奈々さんのデビューシングル「想い」の発売日は?', //問題文 'A'=>['2001年 12月4日','2001年 12月5日','2001年 12月6日','2001年 12月7日'], //回答群 'C'=>2 //正解のエントリー ], ['Q'=>'水樹奈々さんのシングルCDの中で売り上げ枚数が1番多いのは?',//問題文 'A'=>['BRIGHT STREAM','ETERNAL BLAZE','PHANTOM MINDS','Synchrogazer'], //回答群 'C'=>0 //正解のエントリー ], ['Q'=>'SC NANA NETファンクラブイベントⅦ 奈々の部屋 2日目のゲストは?',//問題文 'A'=>['森口博子','中村悠一','若本規夫','水木一郎'], //回答群 'C'=>3 //正解のエントリー ], ['Q'=>'2016年に開催された NANA MIZUKI LIVE PARK 2016 7曲目に歌われた曲は? ',//問題文 'A'=>['STAND UP!','POP MASTER','76th Star','7COLORS'], //回答群 'C'=>1 //正解のエントリー ], ['Q'=>'NANA MUSIC LABORATORY 2019 〜ナナラボ〜にて<br> 早見沙織さんとデュエットした際の水樹さんの衣装の色は?',//問題文 'A'=>['白','青','赤','緑'], //回答群 'C'=>3 //正解のエントリー ], ['Q'=>'水樹奈々さんの結婚記念日は?',//問題文 'A'=>['7月6日','7月7日','7月8日','7月9日'], //回答群 'C'=>0 //正解のエントリー ], ['Q'=>'STORIESはどのシングルのカップリング曲?',//問題文 'A'=>['Trickster',' 夢幻','MASSIVE WONDERS','STARCAMP EP'], //回答群 'C'=>1 //正解のエントリー ], ['Q'=>'still in the grooveのジャケットの水樹さんは何色の服を着ている?',//問題文 'A'=>['青','黄色','緑','赤'], //回答群 'C'=>3 //正解のエントリー ], ['Q'=>'2019年に開催されたNANA MIZUKI LIVE GRACE -OPUSⅢ<br> ステージに設置された時計台が指していた時間は? ',//問題文 'A'=>['9時57分','9時58分','9時59分','10時00分'], //回答群 'C'=>1 //正解のエントリー ], ]; $n = rand( 0, 9 ); $title = $quiz[$n]['Q']; $question = $quiz[$n]['A']; $answer = $question[$quiz[$n]['C']]; ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>水樹奈々クイズ</title> </head> <body> <h2><?php echo $title?></h2> <form method="POST" action="answer.php"></form> </body> </html><?php foreach ($question as $value){ ?> <input type="radio" name="question" value="<?php echo $value; ?>" /><?php echo $value ?> <br> <?php } ?> <br> <input type="hidden" name="answer" value="<?php echo $answer?>"> <input type="submit" value="回答する">
回答用コード
<?php $question = $_POST['question']; $answer = $_POST["answer"]; if ($question == $answer) { $result = "正解!"; }else{ $result = "不正解 <br><br> 答え $answer"; } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>水樹奈々クイズ</title> </head> <body> <h2>結果</h2> <?php echo $result?></body> </html><input type="hidden" name="answer" value="<?php echo $answer?>"> <br> <br> <a href="index.php"><input type="submit" value="次の問題へ"></a>