比较两个基于键值的数组

时间:2017-08-21 10:46:23

标签: php arrays

我正在使用测验引擎并且正在比较答案。

我有两个数组

正确答案:

 0 => "a"
 1 => "a"
 2 => "a"
 3 => "c"

选择答案......

 0 => "c"
 1 => "b"
 2 => "a"
 3 => "b"

基于此,我知道(通过比较自己)我有1个正确答案。

是否有一个PHP函数可以比较键和值并增加一些类似的?

我看过array_intersect和array_difference,但他们似乎没有给我所需的答案。

由于

2 个答案:

答案 0 :(得分:5)

使用array_intersect_uassoc函数的简短解决方案(在扩展输入数组上):

$correct = ["a", "a", "a", "c", "a", "c"];
$chosen =  ["c", "b", "a", "b", "a", "b"];

$result = array_intersect_uassoc($correct, $chosen, 'strnatcmp');
print_r($result);

输出:

Array
(
    [2] => a
    [4] => a
)

答案 1 :(得分:1)

我会编写一个函数,为每个键生成一个数组,如果答案是正确的(1,或者如果错误则为0),那么你不仅可以快速计算分数,还可以使用数组在以后显示问卷结果。就像显示哪些问题是正确的以及哪些问题是错误的那样。

<?php
    $corrects = array(
         0 => "a", 
         1 => "a", 
         2 => "a", 
         3 => "c"
     );

    $answers = array(
        0 => "a", 
        1 => "a", 
        2 => "a", 
        3 => "c"
    );

    function verify($answers, $corrects) {
        $results = array();

        foreach($corrects as $question => $correct) {
            $results[$question] = $correct == $answers[$question] ? 1 : 0;
        }

        return $results;
    }

    $results = verify($answers, $corrects); 
    $score = array_sum($results);
?>

它为更复杂的评分或多个正确答案问题等留下了空间。