在下面的一段代码中,它根据$OptionType
显示来自A-Z的字母列表(例如,OptionType是A-D,然后它显示字母A B C D)。然后它会删除正确的答案($dbAnswer
),以便显示错误的答案。
E.g正确答案是B
。所以它显示的错误答案是A C D。
现在这适用于字母。
我遇到的问题是,如果选项为True or False
或Yes or No
,则无法从错误答案中删除正确答案?例如,如果选项类型为True or False
,如果True
正确且False
不正确,那么它应该只显示False
答案,而是显示两个答案{{1 }和True
。如果选项类型为False
或True or False
,我该如何才能分割错误且正确的答案。
以下是代码:
Yes or No
更新
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 = str_split( $dbAnswer );
$wrong = array_diff( $options, $right );
$incorrect_ans[] = $wrong;
}
答案 0 :(得分:2)
如果您在数据库中将'True'或'False'保存为字符串,请确保在PHP中进行正确的比较。 True / False本质上是一种不同的数据类型(布尔值而不是字符串):
$right = $dbAnswer; // $right = 'True';
foreach ($options as $option) {
// To echo out 'wrong' answers
if ($option !== $right) {
echo $option . '<br>';
}
}
==
和===
之间的区别在于后者不仅比较了值,还比较了数据类型。
foreach ($options as $option) {
// To echo out 'wrong' answers
if ($option !== $right) {
$incorrectAnswersArray[] = $option;
}
}
// You now have all the incorrect answers in $incorrectAnswersArray
$firstIncorrectAnswer = $incorrectAnswersArray[0];
$secondIncorrectAnswer = $incorrectAnswersArray[1];
// etc.