как сравнить значения 2 массивов друг с другом в php и вывести различия - PullRequest
1 голос
/ 19 января 2020

У меня есть 2 массива с каждыми 10 значениями.

print_r из var $correct answers дает мне такой вывод:

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

print_r из var $choosen_answers дает мне этот вывод:

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
)

Каждое значение в массиве соответствует номеру вопроса, поэтому

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

Хотите, чтобы я хотел достичь: сравните эти массивы друг с другом и получите вывод, подобный:

Number of wrong answers: 3

Wrong answers: Question 1 Question 3 Question 10

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 19 января 2020

Уважение к ответу выше, но это можно сделать проще: 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
}



2 голосов
/ 19 января 2020
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;
}
...