如果选项类型是字母,下面的代码将正确的字母和错误的字母分开。例如,如果选项类型是 AD 并且正确的字母是 B,那么它使用$wrong
变量从 ABCD 中删除 B,使其成为$incorrect_ans
变量的 ACD。
现在我想做的是,如果选项类型是Yes or No
,正确答案是Yes
,那么它应该分开Yes
,Yes, No
以便我可以No
在incorrect_ans
变量中显示。问题是目前它没有拆分这两个选项,因此当在这个例子中No
应该不正确时,它会将这个答案显示为不正确的答案。但是如何才能做到这一点呢?
我也希望同样适用于True or False
选项。正如我提到的,我的代码适用于字母答案,而不是Yes or No
or True 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;
)。因此,使用以下方法将正确答案与错误答案分开:
$wrong = array_diff($options, $right);
然后我们留下了不正确的答案 as B D E
。这些使用以下方法存储在数组中:
$incorrect_ans[] = $wrong;
我遇到的问题是,这不适用于问题 2 中Yes or No
的选项。错误答案是问题 2 No
,正确答案是Yes
问题 2,但它不会拆分Yes
,No
因为它将它们都显示为错误答案。这是不正确的。