見出し画像

[PHP]超簡単なクイズを作る

今回はPHPを使ってめっちゃ簡単なクイズを作りたいと思います。

関数とかは使わずに実装してるため、あまりきれいなコードとは言えないかもしれませんがご了承ください。

コード

コード全体はこんな感じです。

$quiz = array(
  'question' => '日本一高い山は何でしょう?',
  'answers' => array(
    1 => '六甲山', 
    2 => '富士山', 
    3 => '阿蘇山', 
    4 => '桜島',
  ),
  'correct' => '富士山',
);

echo $quiz['question']."\n";

foreach($quiz['answers'] as $i => $answer):
  echo $i.":".$answer." ";
endforeach;

echo "\n";
echo ">>>";

$input = trim(fgets(STDIN));
if($quiz['answers'][$input] == $quiz['correct']):
  echo '正解!';
else:
  echo '不正解';
endif;

/* 実行結果 */
日本一高い山は何でしょう?
1:六甲山 2:富士山 3:阿蘇山 4:桜島
>>>2
正解!

変数の定義

$quiz = array(
  'question' => '日本一高い山は何でしょう?',
  'answers' => array(
    1 => '六甲山', 
    2 => '富士山', 
    3 => '阿蘇山', 
    4 => '桜島',
  ),
  'correct' => '富士山',
);

$quizに連想配列でquestion, answers, correctをキーとして問題、答え、正解を定義しています。

また、answersの値(バリュー)には連想配列で番号とそれに紐づく答えを格納しています。
1番を選んだ場合、六甲山と答えたことになります。

クイズ内容と選択肢を出力

echo $quiz['question']."\n";

foreach($quiz['answers'] as $i => $answer):
  echo $i.":".$answer." ";
endforeach;

echo "\n";
echo ">>>";

1行目でクイズ内容を出力しています。

選択肢については、キーを$i, 値を$answerとしてforeach文を使って1つずつ出力します。
(配列のループはforeachを使うのがスマートで便利です。)

クイズの正誤判定

$input = trim(fgets(STDIN));
if($quiz['answers'][$input] == $quiz['correct']):
  echo '正解!';
else:
  echo '不正解';
endif;

1行目は標準入力を使って値を取得し$inputに代入しています。
(2を入力した場合、$input = 2)

echo >>>;
$input = trim(fgets(STDIN));

/* 実行結果 */
>>> //ここに数字を入力してエンター

入力した答えが正解かどうかの判定はif文を使います。
入力した数字に対応する$quiz['answers'][$input]が$quiz['correct']と一致しているかどうかを条件として正解か不正解かを出力しています。


いかがでしたでしょうか。
今回はかなり簡単なプログラムでしたがforeachやifなどの基本文法を使う練習になったので個人的には今までの勉強の成果を試すことができたと思います。

まだまだPHPの学習を頑張っていきます!

以上です。

いいなと思ったら応援しよう!