Показать сообщение отдельно
  #7 (permalink)  
Старый 02.10.2017, 12:54
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

DivMan,
Главное, чтобы смог прочитать свой код в будущем. Из-за большой вложенности ты в нем легко запутаешься.
Работая с массивом, как индексируемым, ассоциативные ключи - лишнее.
Вместо инкрементирования счетчика $i в цикле, в foreach можно определить переменную $key для подобного рода задач.

$questions = [
    [
        'question' => 'Сколько будет 2+2?',
        'variants' => ['2', '4', '6'],
        'answer' => '1'

    ],

    [
        'question' => 'Сколько будет 5+5?',
        'variants' => ['10', '55', '25'],
        'answer' => '0'

    ],

    [
        'question' => 'Зимой и летом, одним цветом?',
        'variants' => ['Крокодил', 'трава'],
        'answer' => '0'
    ]
];

$html = '';

function printInputs($i, $n, $k)
{
    global $html;
    $html .= '<label>'.$i.'<input type="radio" name="'.$k.'" value="'.$n.'"></label>&nbsp;&nbsp;&nbsp;';
}

function printResult($b, $k, $v, $arr)
{
  global $html;
  $msg = '';
  $style = '';

  if ($b) {
    $style = ' style="color: green; font-weight: bold"';
    $msg = 'правильно';
  } else {
    $style = ' style="color: red; font-weight: bold"';
    $msg = 'неправильно, правльный ответ: ' . $arr[$k]['variants'][(int)$arr[$k]['answer']];
  }

  $html .= '<p>'.$arr[$k]['question'].'<br><span '. $style.'>Ваш ответ '.$arr[$k]['variants'][$v].' - '.$msg.' </span></p>';

}

if(empty($_GET['proverka'])) {
    $html .= '<form action="" method="get">';

    foreach($questions as $key => $arr) {
        if (array_key_exists('question', $arr))
          $html .= '<p>' . $arr['question'] . '</p>';

        if (array_key_exists('variants', $arr) && is_array($arr['variants']))
          array_walk($arr['variants'], 'printInputs', $key);

    }
    $html .= '<p><input type="submit" name="proverka" value="Проверить"></p></form>';

} else {

    if (count($_GET)-1 < count($questions)) {
        $html .= 'Ответьте на все вопросы!';
    } else {

      array_pop($_GET);

      foreach ($_GET as $key => $value) {

          if ($value == $questions[$key]['answer']) {
            printResult(true, $key, $value, $questions);
          } else {
            printResult(false, $key, $value, $questions);
          }

      }

    }

}

echo $html;
Ответить с цитированием