プロが教えるわが家の防犯対策術!

小テストのプログラミングを作っています。
質問の答えの選択肢がラジオボタンで4つ表示されるのですが、毎回同じ位置に答えがあると何度も問題を解いているうちに、回答者は答えの場所を覚えてしまいます。
なので質問の答をランダムに表示させたいのですが、どうしてもやり方がわかりません。
どうぞよろしくお願いいたします。

問1:小説「吾輩は猫である」の作者は誰ですか?<br>
<INPUT type="radio" name="sentakushi1" value="1">夏目漱石<br>
<INPUT type="radio" name="sentakushi1" value="2">内田百閒<br>
<INPUT type="radio" name="sentakushi1" value="3">太宰治<br>
<INPUT type="radio" name="sentakushi1" value="4">芥川龍之介<br>

A 回答 (2件)

PHPカテゴリーなのでPHPで書くと仮定して、



$kotae = array(
array("key"=>1, "name"=>"夏目漱石"),
array("key"=>2, "name"=>"内田百閒"),
array("key"=>3, "name"=>"太宰治"),
array("key"=>4, "name"=>"芥川龍之介")
);
shuffle($kotae);
foreach($kotae as $val) {
print '<INPUT type="radio" name="sentakushi1" value="' . $val["key"] . '">' . $val["name"] . '<br>';
}

といった感じでしょうか。

この回答への補足

ありがとうございました。大成功です。
私はまだ初心者の上に、手元にある入門書にはshuffle関数は書いていませんでしたので、本当に助かりました。
ところで厚かましいのを承知でもう一つだけ伺いたいのですが、問題文自体をランダムに表示するには今回のと同じ要領でいいんでしょうか?実際に作りたいのはたくさんある問題文の中から決められた問題数が重複せずに出題されるようにしたいのです。

今回教えていただいたソースを一つのまとまりにしてランダムに表示させるよう試行錯誤をしているのですが、やはりうまくいきません。恐れ入りますが、ぜひお時間のある時にヒントをいただけたらと思います。
どうぞよろしくお願いいたします。

補足日時:2011/06/22 21:46
    • good
    • 0

たとえばデータの持ち方を工夫してみるとこんな感じで表現できます



<?

$QA[]=array(
"Q"=>array("id"=>"q1","text"=>"質問A")
,"A"=>array(
array("key"=>1,"text"=>"回答A-1")
,array("key"=>2,"text"=>"回答A-2")
,array("key"=>3,"text"=>"回答A-3")
,array("key"=>4,"text"=>"回答A-4")
)
);
$QA[]=array(
"Q"=>array("id"=>"q2","text"=>"質問B")
,"A"=>array(
array("key"=>1,"text"=>"回答B-1")
,array("key"=>2,"text"=>"回答B-2")
,array("key"=>3,"text"=>"回答B-3")
,array("key"=>4,"text"=>"回答B-4")
)
);
$QA[]=array(
"Q"=>array("id"=>"q3","text"=>"質問C")
,"A"=>array(
array("key"=>1,"text"=>"回答C-1")
,array("key"=>2,"text"=>"回答C-2")
,array("key"=>3,"text"=>"回答C-3")
,array("key"=>4,"text"=>"回答C-4")
)
);

shuffle($QA);
$q_no=1;
foreach($QA as $arr1){
shuffle($arr1["A"]);
print "問".$q_no.")".$arr1["Q"]["text"]."<br>\n";
foreach($arr1["A"] as $arr2){
$id=$arr1["Q"]["id"]."_".$arr2["key"];
print "<INPUT type=\"radio\" id=\"".$id."\" name=\"".$arr1["Q"]["id"]."\" value=\"".$arr2["key"]."\"><label for=\"".$id."\">".$arr2["text"]."</label><br>\n";
}
$q_no++;
}
?>
    • good
    • 0
この回答へのお礼

早速試してみましたが、今回も大成功でした。
また助けていただいてありがとうございました。
理解できるとプログラミングはパズルみたいで面白いですね。
少しずつ工夫を重ねて完成に近づけて行きたいと思います。

お礼日時:2011/06/23 23:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!