2

I'd like to use PHP to grade a quiz. I have a quiz that, upon submission, delivers an array of answers. They're all True/False so the array is something like

array([0] => T, [1] => F, [2] => F)

And then I have an answer key, something like

array([0] => T, [1] => F, [2] => T)

I need to go through each answer so I can not only calculate the percentage correct, but also display the correct answers for questions that were missed if and only if the number of missed questions is fewer than 20%.

So my question is, should I be doing some kind of foreach loop to go through each, or would it be tidier to use some kind of array comparison function, and if so, which?

3 Answers 3

3

Use foreach():

$answer   = array(true, true, false, true, false);
$expected = array(true, true, true,  true, false);
$error    = array();

foreach ($answer as $k => $v) {
  if ($v !== $expected[$k])
    $error[$k] = $v;
}

// Display the correct answer if number of mistakes is <= 20%
if (floatval(count($error) / count($expected)) <= .2) {
  $correct = array_intersect_key($expected, $error);
}
Sign up to request clarification or add additional context in comments.

Comments

0

With a foreach loop you will have more control. You can determinate the correct % by dividing the equal values in the array by the total question count.

Comments

0

Take the grading-array as a starting point. Since it should contain all the keys (for all questions) you can use them to detect missing keys in the submission-array and find all the answers. If you were to calculate the report manually, here's an example:

$submission = array(1 => true, 3 => false, 4 => true, 100 => true);
$grading = array(0 => true, 1 => true, 2 => true, 3 => true, 4 => true);


//gather data
$answered = array();
$missing = array();
$correct = array();
$wrong = array();
foreach ($grading as $key => $answer) {
    if(array_key_exists($key, $submission)) {
        array_push($answered, $key);
        if ($submission[$key] === $answer)
            array_push($correct, $key);
        else
            array_push($wrong, $key);
    }
    else
        array_push($missing, $key);
}


//print report
echo "correct\n";
print_r($correct);
echo "\n\n";

echo "wrong\n";
print_r($wrong);
echo "\n\n";

echo "missing\n";
print_r($missing);
echo "\n\n";

echo "% answered\n";
echo 100*(count($answered)/count($grading));
echo "\n\n";

echo "% correct (of all questions)\n";
echo 100*(count($correct)/count($grading));
echo "\n\n";

echo "% correct (of all answered)\n";
echo 100*(count($correct)/count($answered));
echo "\n\n";

echo "% wrong (of all questions)\n";
echo 100*(count($wrong)/count($grading));
echo "\n\n";

echo "% wrong (of all answered)\n";
echo 100*(count($wrong)/count($answered));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.