<?php
header('Content-type: text/html');
error_reporting(E_ALL);
mb_internal_encoding('utf-8');
 
class Question
{
    public $text;       // текст вопроса
    public $points;     // число баллов
    public $answers;    // варианты ответов
    public $correctAnswer; // правильный ответ
    public $hints;      // подсказки
}
 
// Функция, создающая массив с вопросами:
function createQuestions()
{
    $questions = array();
    $q = new Question;
    $q->text = "Какая планета располагается четвертой по счету от Солнца?";
    $q->points = 10; // 10 баллов за ответ
    $q->answers = array('a' => 'Венера', 'b' => 'Марс', 'c' => 'Юпитер', 'd' => 'Меркурий'); // Варианты ответа
    $q->correctAnswer = 'b'; // Правильный ответ
    $q->hints = "Первая буква М";
    $questions[] = $q;
 
    $q = new Question;
    $q->text = "Какой город является столицей Великобритании?";
    $q->points = 5;
    $q->answers = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон');
    $q->correctAnswer = 'd';
    $q->hints = "Первая буква Л";
    $questions[] = $q;
 
    $q = new Question;
    $q->text = "Кто придумал теорию относительности?";
    $q->points = 30;
    $q->answers = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон');
    $q->correctAnswer = 'c';
    $q->hints = "Первая буква А";
    $questions[] = $q;
 
    return $questions; // Объекты в массиве
}
 
function printQuestions($questions)
{
    $i = 1; // номер вопроса
 
    foreach ($questions as $question) {
        echo "{$i}. {$question->text}<br>";
        echo "Варианты ответов:<br>";
 
        foreach ($question->answers as $letter => $answer) {
            echo "  {$letter}. {$answer}<br>";
        }
        echo "<br>";
        $i++;
    }
}
 
function checkAnswers($questions, $answers)
{
    // Проверим, что число ответов равно числу вопросов (защищаемся от ошибки)
    if (count($questions) != count($answers)) {
        die("Число ответов и вопросов не совпадает\n");
    }
 
    $pointsTotal = 0; // сколько набрано баллов
    $pointsMax = 0;   // сколько можно набрать баллов при всех правильных ответах
    $correctAnswers = 0; // сколько отвечено верно
    $totalQuestions = count($questions); // Сколько всего вопросов
 
    // Цикл для обхода вопросов и ответов
    for ($i = 0; $i < count($questions); $i++) {
        $question = $questions[$i]; // Текущий вопрос
        $answer = $answers[$i]; // текущий ответ
 
        // Считаем максимальную сумму баллов
        $pointsMax += $question->points;
 
        // Проверяем ответ
        if ($answer == $question->correctAnswer) {
            // Добавляем баллы
            $correctAnswers ++;
            $pointsTotal += $question->points;
        } else {
            // Неправильный ответ
            $number = $i + 1;
            echo "Неправильный ответ на вопрос №{$number} ({$question->text})<br>";
            echo "Подсказка: {$question->hints}<br>";
        }
    }
 
    // Выведем итог
    echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}<br>";
}
 
$questions = createQuestions();
printQuestions($questions);
 
$answers = array('b', 'd', 'a');
checkAnswers($questions, $answers);
?>