こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP ランダムループへのラジオボタン付加

$loop = 3;
$count = 0;

if (count($mondai) > $loop) {
$selected_keys = array();
while ($count < $loop){
$hazure_key = mt_rand(0, count($mondai) - 1);
if (in_array($hazure_key, $selected_keys)) {
continue;
}
array_push($selected_keys, $hazure_key);
$mondai_hyouji[$count] = $mondai[$hazure_key];
$count++;
}
}

$mondai_hyouji[3] = $mondai[$seikai_key];

$numbers = range(0, 3);
shuffle($numbers);
foreach ($numbers as $number){
echo "$mondai_hyouji[$number]";
}

問題の不正解を複数呼び出し、正解を1つ呼び出してシャッフルして表示させています。
これらにラジオボタンを付けたいと思ったのですが文法エラーになってしまいます。
上記のコードに付け加えるのは難しいでしょうか?

投稿日時 - 2012-12-25 15:21:28

QNo.7861084

すぐに回答ほしいです

質問者が選んだベストアンサー

ええと、まず前回までの分を整理しましょうか。
echoというのはエコーって読むんですが、文字列を出力するものです。

それで私の3回目のレスに書いている文字列連結という意味は

$mondai_hyouji[$count] = "<input type=\"radio\" name=\"kotae\" value=\"不正解です!\"/>".$mondai[$hazure_key];
$mondai_hyouji[3] = "<input type=\"radio\" name=\"kotae\" value=\"正解です!\"/>".$mondai[$seikai_key];

という形で問題に対して連結すればいけるんじゃないですか?というのが主旨です。
つまり、そのタイミングでechoする、というわけでは無く
選択させたい問題の文字列にラジオボタンを追加する、という方法のヒントでした。

なので3回目のレスお礼に書かれているコードのようにセット時にechoするのではなく
上記のように配列にセットする際に文字列連結で問題と一緒にセットすると
いくらシャッフルしようが配列の中にその文字が入っているので問題ないはずです。

投稿日時 - 2012-12-26 18:16:16

お礼

すみません…勘違いしてました…
仰る通りに配列にラジオボタン毎突っ込んだら表示されました!
ラジオボタンしか表示されなかったのですがどうにかしてやってみます!
重ね重ねありがとうございました!

投稿日時 - 2012-12-26 22:20:32

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

ああ、ただのコードサンプルでしたので・・すいません。解りにくかったですよね(・ω・;)

表示用の変数にセットする前に入れてしまえば、一緒にシャッフルされませんか?
$mondai_hyouji[$count] = $mondai[$hazure_key];
とか
$mondai_hyouji[3] = $mondai[$seikai_key];

の辺りで一緒にセットすればいけそうですが。。

あと文字列の連結は . (ピリオド)を使えば可能です。

"あ"."い"."う"

という感じに。

投稿日時 - 2012-12-26 09:36:13

お礼

いえ!表示できただけでも前進できたのでありがたいです!

echo "<input type=\"radio\" name=\"kotae\"
value=\"不正解です!\"/>$yomi[$hazure_key]";
$yomi_hyouji[$count] = $yomi[$hazure_key];

echo "<input type=\"radio\" name=\"kotae\" value=\"正解です!\"/>$yomi[$seikai_key]";
$yomi_hyouji[3] = $yomi[$seikai_key];

こんな感じでしょうか?
それでもシャッフルしたものを表示したらラジオボタンが外れてしまいました…

投稿日時 - 2012-12-26 16:52:47

ANo.2

つまり

echo "<input type="radio" name="kotae" value="不正解です!"/>$mondai_hyouji[$hazure_key]<br/>";

と記述していたのでしょうか?
それならばタグ中の「"」が文字列を表す「"」と混同してしまうので、それをエスケープしなければいけません。
それが文法エラーのもとになります。

type="radio"
name="kotae"
value="不正解です!"

6個の"がありますよね。
それをエスケープ文字を使って、文字列の「"」として認識させる必要があります。

例。

type=\"radio\"

という感じですね。

投稿日時 - 2012-12-25 18:23:23

お礼

echoを使わずにformでやってました…
echoを使うことによってボタンの精製はできました!ありがとうございます!エスケープ文字も勉強になりました。

シャッフルの後に付けたらボタンだけになってしまいました、
シャッフルしてしまった配列の中身に個別のボタンを付加するのは難しいでしょうか?質問ばかりですみません

投稿日時 - 2012-12-26 04:34:38

ANo.1

ラジオボタンの記述はどのようにされましたか?

タグの中にダブルクォート(")が含まれているなら
もう1ステップ用意してそっちエスケープして、echoするなどの方法もありかもしれません。

投稿日時 - 2012-12-25 15:51:20

補足

<input type="radio" name="kotae" value="不正解です!"/>$mondai_hyouji[$hazure_key]<br/>

をループの中に入れて、

<input type="radio" name="kotae" value="正解です!"/>$mondai_hyouji[$seikai_key]<br/>

を正解の後につけようとしました。
シャッフルの後につけるべきだったでしょうか?

何を選んだのか記憶しておきたいのですが、ループやシャッフルをしているのでどう記述すればよいのかこんがらがってしまいました…

投稿日時 - 2012-12-25 17:06:55

お礼

ありがとうございます!

投稿日時 - 2012-12-26 04:24:56

あなたにオススメの質問