【问题标题】:How to split correct and incorrect answers如何区分正确和错误的答案
【发布时间】:2012-12-31 05:36:51
【问题描述】:

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

现在我想做的是,如果选项类型是Yes or No,正确答案是Yes,那么它应该将YesYes, No 分开,这样我就可以在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;)。因此,使用以下方法将正确答案与错误答案分开:

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

然后我们得到了错误的答案,即B D E。这些存储在数组中:

$incorrect_ans[] = $wrong;

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

【问题讨论】:

  • 这个很难理解,能不能用一个具体的例子来简化一下。
  • 我已包含更新,这有帮助吗?

标签: php


【解决方案1】:

稍微更新一下你的代码

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

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

【讨论】:

  • 对不起,我没有意识到你稍微改变了代码。我以为您在给我信息,但不知道您更改了代码以包含数组。谢谢它的工作
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多