Показать сообщение отдельно
  #13 (permalink)  
Старый 03.10.2017, 15:39
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Я усложнил задание.

Теперь на один вопрос может быть несколько правильных ответов. Пользователь должен отметить один или несколько чекбоксов.

$questions = [
	1 => [
		'question' => 'Сколько будет 2+2?',
		'variants' => ['2', '4', '6', '4.0'],
		'answers' => ['1', '3']
			 
	],
	
	
	2 => [
		'question' => 'Сколько будет 6+6?',
		'variants' => ['66', '6', '12'],
		'answers' => ['2']
			 
	],
	
	
	3 => [
		'question' => 'Найдите несуществующие месяцы',
		'variants' => ['Февраль', 'Июндр', 'Сентябрь', 'Авгурст', 'Денабрь'],
		'answers' => ['1', '3', '4']
			 
	],
	
	
];


if(empty($_GET['proverka'])) {
	echo '<form action="" method="get">';
	$i = 1;
	foreach($questions as $num) {
		foreach($num as $dano => $v) {
		
				if(gettype($v) == 'array' && $dano == 'variants') {
				$j = 0;
				foreach($v as $val) {
					echo '<label>'.$val.'<input type="checkbox" name="'.$i.'[]" value="'.$j.'"></label>&nbsp;&nbsp;&nbsp;';
					$j++;
				}
			}
			echo '<br>';
			
			if($dano == 'question') {
				echo $v . '<br>';
			}
		}
		$i++;
	}
	echo '<br>';
	echo '<input type="submit" name="proverka" value="Проверить">';
	echo '</form>';
}


if(!empty($_GET['proverka'])) {

	if(count($_GET)-1 < count($questions)) {
		die ('Ответьте на все вопросы.');
	}
	
	
	$k = 1;
	foreach($questions as $num) {
		foreach($num as $dano => $v) {
			
			if($dano == 'answers') {
				$rightAnswers = array_diff($_GET[$k], $questions[$k]['answers']);
				$countUserAnswer = $_GET[$k];
				$countAnswer = $questions[$k]['answers'];
		
				echo '<br>';
				
				if(count($rightAnswers) == 0 && ($countUserAnswer == $countAnswer)) {
				
					$keyAnswer = [];
					
					foreach($_GET[$k] as $userAnswer) {
						$keyAnswer[] = $questions[$k]['variants'][$userAnswer];
					}
					
					echo $questions[$k]['question'] . '<br>';
					
					echo 'Ваш ответ: ' ;
					echo implode(', ', $keyAnswer);
					echo ' и это <span style="color: green; font-weight: bold;">правильный ответ</span>.';
					
					echo '<br><br>';
				}
				
				
				else {
					$keyAnswer = [];
					$keyTrueAnswer = [];
				
					echo $questions[$k]['question'] . '<br>';
					
					echo 'Ваш ответ: ' ;
					
					foreach($_GET[$k] as $userAnswer) {
						$keyAnswer[] = $questions[$k]['variants'][$userAnswer];
					}
					
					echo implode(', ', $keyAnswer);
					
					echo ' - <span style="color: red; font-weight: bold;">это неправильно</span>.<br>';
					echo 'Правильный ответ(ы): ' ;
					
					foreach($questions[$k]['answers'] as $ans) {
						$keyTrueAnswer[] = $questions[$k]['variants'][$ans];
					}
					
					echo implode(', ', $keyTrueAnswer);
					
					echo '<br><br>';
				}
				
				
				
			}
			
		}
		$k++;
	}
	
}
Ответить с цитированием