はい、承知いたしました。英単語と日本語訳のペアが記述された CSV ファイルを読み込み、その内容に基づいて日本語訳を当てるクイズをPHPで作成します。
まずは、CSVファイルの準備をお願いします。以下のような形式で、カンマ区切りで英単語と日本語訳を記述した words.csv
というファイルを作成してください。
コード スニペット
apple,りんご
banana,バナナ
orange,オレンジ
grape,ぶどう
strawberry,いちご
melon,メロン
pineapple,パイナップル
kiwi,キウイ
peach,もも
cherry,さくらんぼ
lemon,レモン
mango,マンゴー
... (以下、単語と日本語訳のペアを記述)
次に、このCSVファイルを読み込んでクイズを実行するPHPプログラムを作成します。以下のコードを quiz.php
という名前で保存してください。
PHP
<?php
// CSVファイルのパス
$csvFile = 'words.csv';
// CSVファイルを読み込んで配列に格納
$words = [];
if (($handle = fopen($csvFile, 'r')) !== false) {
while (($data = fgetcsv($handle)) !== false) {
if (count($data) === 2) {
$words[$data[0]] = $data[1]; // 英単語をキー、日本語訳を値とする連想配列
}
}
fclose($handle);
} else {
die("CSVファイルを開けませんでした。\n");
}
// 出題する単語数を設定
$numQuestions = 10;
// ランダムに単語を選択
$englishWords = array_keys($words);
shuffle($englishWords);
$quizWords = array_slice($englishWords, 0, $numQuestions);
$score = 0;
echo "英単語 日本語訳 クイズ (全 {$numQuestions}問)\n";
for ($i = 0; $i < $numQuestions; $i++) {
$englishWord = $quizWords[$i];
$correctJapanese = $words[$englishWord];
echo "\n第 " . ($i + 1) . " 問: {$englishWord} の日本語訳は?\n";
$answer = trim(fgets(STDIN)); // 標準入力から回答を取得
if ($answer === $correctJapanese) {
echo "正解!\n";
$score++;
} else {
echo "不正解。正解は {$correctJapanese} です。\n";
}
}
echo "\n--- 結果 ---\n";
echo "あなたの得点は {$score} / {$numQuestions} 点です。\n";
?>
プログラムの説明:
- CSVファイルのパス:
$csvFile
変数にCSVファイルのパス (words.csv
) を設定します。 - CSVファイルの読み込み:
fopen()
関数でCSVファイルを開きます。fgetcsv()
関数を使って、CSVファイルから1行ずつ配列として読み込みます。- 読み込んだ配列の要素数が2つ(英単語と日本語訳)であれば、英単語をキー、日本語訳を値とする連想配列
$words
に格納します。 fclose()
関数でファイルを閉じます。- ファイルが開けなかった場合はエラーメッセージを表示して終了します。
- 出題数の設定:
$numQuestions
変数に出題する回数(ここでは10回)を設定します。 - ランダムな単語の選択:
array_keys()
関数で$words
配列のキー(英単語)を配列として取得します。shuffle()
関数で英単語の配列をランダムに並び替えます。array_slice()
関数で、先頭から$numQuestions
個の単語を$quizWords
配列として抽出します。
- クイズの実行:
- ループ処理で
$quizWords
の各英単語について質問を表示します。 fgets(STDIN)
関数で標準入力からユーザーの回答を取得し、前後の空白をtrim()
関数で削除します。- ユーザーの回答と正解(
$words[$englishWord]
) を比較し、正誤判定を行います。 - 正解の場合は "正解!"、不正解の場合は "不正解。正解は..." と表示します。
- 正解数を
$score
変数でカウントします。
- ループ処理で
- 結果表示: 全問終了後、得点と満点を表示します。
実行方法:
- 上記のPHPコードを
quiz.php
という名前で保存します。 - 英単語と日本語訳を記述した
words.csv
ファイルをquiz.php
と同じディレクトリに保存します。 - ターミナル(コマンドプロンプト)を開き、保存したディレクトリに移動します。
- 以下のコマンドを実行してクイズを開始します。
Bash
php quiz.php
プログラムが実行されると、順番に英単語が表示され、日本語訳の入力を促されます。回答を入力してEnterキーを押すと、正誤判定と次の問題が表示されます。10問終了後に最終的な得点が表示されます。
このプログラムを元に、出題数を変更したり、不正解だった問題を復習する機能を追加したりするなど、さらに発展させることも可能です。
0 件のコメント:
コメントを投稿