Я тестирую викторину с десятью вопросами. Все они имеют множественный выбор, за исключением второго (заполняющего пробел) и последнего, что требует от пользователя выбора трех из шести флажков.Критерий подсчета очков не работает правильно
Это ключевой ответ и забил сценарий:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$correct = 0;
$answers = array(1 => array('A'),
2 => array('Mars'),
3 => array('C'),
4 => array('D'),
5 => array('A'),
6 => array('C'),
7 => 'C',
8 => 'C',
9 => 'B',
10 => array('A','B','C'));
$total = count($answers);
foreach($answers as $num => $answer){
$qa = $_POST['q'.$num.''];
if(is_array($answer)){
if(array_diff($qa, $answer) == array()){
$correct++;
}
} else if($qa === $answer){
$correct++;
}
$grade= ($correct/count($answers))*100;
}
}
echo '<div style="background: #ff0;">Score '.$grade.'%</div>';
echo '<br>var_dump: ';
var_dump($_POST);
Если я получаю все десять вопросов правильно, он отображает правильный массив (ниже), но я только получить оценку 70% вместо 100% , Если я получу первые два вопроса неправильно, но все остальные верны, я получаю 50% вместо 80%.
Может ли кто-нибудь увидеть проблему с моим скриптом подсчета очков, или вы считаете, что проблема кроется в другом месте моего кода викторины?
var_dump: array(12) { ["q1"]=> array(1) { [0]=> string(1) "A" } ["q2"]=> array(1) { [0]=> string(7) "Mars" } ["q3"]=> array(1) { [0]=> string(1) "C" } ["q4"]=> array(1) { [0]=> string(1) "D" } ["q5"]=> array(1) { [0]=> string(1) "A" } ["q6"]=> array(1) { [0]=> string(1) "C" } ["q7"]=> array(1) { [0]=> string(1) "C" } ["q8"]=> array(1) { [0]=> string(1) "C" } ["q9"]=> array(1) { [0]=> string(1) "B" } ["q10"]=> array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" } ["PreviousURL"]=> string(25) "http://g1/test/gw-intro" ["user_token"]=> string(13) "54f3d1ac48555" }
В '$ answers', элементы 7, 8 и 9 являются отдельные элементы, в то время как в вашем' $ _POST' соответствующие элементы массивов. Это объясняет 30% -ную разницу в подсчете очков. – cpilko
Yikes, я не знаю, как я это сделал. Я исправил его, но оценка все еще по карте; если я получу первые четыре вопроса правильно, теперь я получаю оценку 100%. Возможно, мне придется отображать только определенные типы вопросов (например, множественный выбор) и посмотреть, могу ли я изолировать проблему. –
Похоже, оценка основана на количестве ответов. Поэтому, если вы отвечаете только на один вопрос, и вы понимаете это правильно, вы получаете 1 из 1 правильно = 100%. Каждый вопрос, на который не ответил, должен вычесть 10% от оценки. –