1

I have 2 arrays with each 10 values.

print_r of var $correct answers gives me this output:

Array ( 
[0] => 3 
[1] => 0 
[2] => 2 
[3] => 3 
[4] => 2 
[5] => 2 
[6] => 3 
[7] => 1 
[8] => 3 
[9] => 1 
)

print_r of var $choosen_answers gives me this output:

Array ( 
[0] => 2 // different value
[1] => 0 
[2] => 1 // different value
[3] => 3 
[4] => 2 
[5] => 2 
[6] => 3 
[7] => 1 
[8] => 3 
[9] => 0 // different value
)

Each value in the array corresponds with the number of question, so

[0] has the value of question 1
[1] has the value of question 2
[2] has the value of question 3
and so on...

Want i want to achieve: compare these arrays with each other an give me an output like:

Number of wrong answers: 3

Wrong answers: Question 1 Question 3 Question 10

How can i achieve that?

john
  • 1,263
  • 5
  • 18

2 Answers2

3

Respect for the answer above, but it can be done more easily: https://www.php.net/manual/en/function.array-diff-assoc.php

$compare_values = array_diff_assoc($correct_answers, $chosen_answers) ; // compare each value of the 2 arrays with each other                       
echo 'Wrong answers: '.count($compare_values).'<br />';
echo 'Wrong questions:<br />';
foreach($compare_values as $key => $value) {
    echo 'Question: '.($key + 1).'<br />'; // + 1 because question 0 does not exist
}



Jack Maessen
  • 1,780
  • 4
  • 19
  • 51
2
function get_wrong_answers($correct_answers, $chosen_answers) {
   // For all given answers, 
   foreach( $chosen_answers as $answer_number=>$given_single_answer ) {
       // check if the answer is correct
       if( $correct_answers[$answer_number] === $given_single_answer )
          // If its correct, remove it from the chosen answers
          unset( $chosen_answers[$key] );
   }
   return $chosen_answers;
}

$wrong_answers = get_wrong_answers($a,$b);

echo 'Number of wrong answers: ' . count( $wrong_answers );

echo 'Wrong answers:';

foreach( $wrong_answers as $answer_number=>$answer ) {
    echo 'Question ' . $answer_number;
}
marks
  • 1,501
  • 9
  • 24