【问题标题】:How to seperate incorrect and correct answers if option type is 'Yes or No' or 'True or False'如果选项类型为“是或否”或“对或错”,如何区分错误和正确答案
【发布时间】:2013-01-15 22:24:21
【问题描述】:

在下面的一段代码中,它根据$OptionType 显示从 A-Z 的字母列表(例如,OptionType 是 A-D,然后它显示字母 A B C D)。然后它会删除正确答案 ($dbAnswer),因此它会显示不正确的答案。

例如,正确答案是B。所以它显示的错误答案是 A C D。

现在这适用于字母。

我遇到的问题是,如果选项是True or FalseYes or No,它不会从错误答案中删除正确答案?例如,如果选项类型是True or False,如果True 正确而False 不正确,那么它应该只显示False 答案,而是同时显示TrueFalse 答案。如果选项类型为True or FalseYes 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;

      } 

更新:

$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';

foreach ($options as $option) {
   // To echo out 'wrong' answers
   if ($option !== $right) {
      echo $option . '<br>';
   } 
}
$wrong = array_diff( $options, $right );  


        $incorrect_ans[] = $wrong;

      } 

【问题讨论】:

    标签: php


    【解决方案1】:

    如果您将“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.
    

    【讨论】:

    • 我认为他想回应不正确的答案,所以($option !== $right)....我认为,有点难以理解的问题。 +1
    • 我能问一下如何在我的代码中实现你的代码,因为你可以看到我有三种不同的选项类型True or FalseYes or No,或者是任何选项类型的字母选项,例如@987654328 @、A-DA-E 等。是的,我想回应不正确的答案
    • 使用上面的代码,让我知道你的进展情况。应该发生的是,它将从数据库中检索正确的答案(例如“假”),并与每个选项进行严格比较。如果选项比较失败(即不正确),它将回显。
    • 在我看来,他为此付出了很多努力。你能告诉我们更多的实际查询吗?我认为您可以使用str_replace 并大大简化此操作。
    • 发现我只需要我的旧代码并将$right = str_split( $dbAnswer ); 更改为$right = array( $dbAnswer ); 这就是需要做的所有事情
    猜你喜欢
    • 2012-12-31
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多