如何区分正确答案和错误答案


How to split correct and incorrect answers

如果选项类型为字母,下面的代码将正确的字母和错误的字母分开。例如,如果选项类型是A-D,正确的字母是B,那么它将使用$wrong变量从A B C D中删除B,使其成为$incorrect_ans变量的A C D。

现在我要做的是,如果选项类型是Yes or No,正确答案是Yes,那么它应该从Yes, No中分离Yes,这样我就可以在incorrect_ans变量中显示No。问题是,目前它没有拆分这两个选项,所以它显示麻烦这个答案作为不正确的答案,而在这个例子中No应该是不正确的。但如何才能做到这一点呢?

我希望同样的工作为True or False选项以及。正如我提到的,我的代码适用于信件的答案,而不是Yes or NoTrue or False

代码如下:

$specialOptionTypes = array(
     'Yes or No'     => array('Yes', 'No'),
     'True or False' => array('True', 'False')
);
while ($stmt->fetch()) {
    // Do this for each row:
    if (array_key_exists($dbOptionType, $specialOptionTypes)) {
        $options = $specialOptionTypes[$dbOptionType];
    } else if (preg_match('/^([A-Z])-([A-Z])$/', $dbOptionType, $match)) {
        $options = range($match[1], $match[2]);
    } else {
        // issue warning about unrecognized option type
        $options = array();
    }
    $right = $dbAnswer; // $right = 'True';
    $wrong = array_diff($options, $right);
    $incorrect_ans[] = $wrong;
}

更新:

如果我在数据库中有这个数据

问题表:

QuestionId QuestionNo OptionId
11          1         3
12          2         26

Option_Table表:

OptionId OptionType
1        A-C
2        A-D
3        A-E
..............
26       Yes or No

回答表:

AnswerId Answer QustionId
1        A      11
2        C      11
3        Yes    12

好了,那么对于问题1(仔细查看表),选项类型($OptionType)是A-E,这意味着使用下面的代码:

(preg_match('/^([A-Z])-([A-Z])$/', $dbOptionType, $match)) {
        $options = range($match[1], $match[2]);

显示这些选项A B C D E

现在问题1的正确答案是A和C(使用$right = $dbAnswer;)。因此,使用

将正确答案与错误答案分开:

$ error = array_diff($options, $right);

那么我们留下了错误的答案,即B D E。使用

将它们存储在数组中。
$incorrect_ans[] = $wrong;

我的问题是,这并不适用于Yes or No选项在问题2。问题2的错误答案是No,正确答案是Yes,但它没有拆分YesNo,因为它将它们都显示为错误答案。这是不正确的。

稍微更新一下代码

$right = array($dbAnswer); // $right = array('True');
$incorrect_ans[] = array_diff( $options, $right );  

array_diff需要两个参数都是数组。您还可以对$option变量进行var_dump,以确保它包含正确的数据。当然,最终的$incorrect_ans数组可以包含"Yes"answers"No",因为每个都是在获取每一行时添加的。 $incorrect_ans的每个元素包含解析的问题的错误答案。我认为您应该使用问题ID作为$incorrect_ans的键,而不仅仅是使用默认的数字键。