0

以下のコードでは、条件に応じて AZ からの文字のリストを表示します$OptionType(たとえば、OptionType が AD の場合、文字 ABCD を表示します)。次に、正解 ( $dbAnswer) が削除されるため、不正解が表示されたままになります。

たとえば、正解はBです。したがって、表示される不正解は AC D です。

これで、文字に対しては問題なく動作します。

私が抱えている問題は、オプションがTrue or FalseまたはYes or No? たとえば、オプション タイプがTrue or Falseで、Trueが正しく、Falseが正しくない場合、回答のみが表示Falseされますが、代わりに回答Trueとの両方が表示されますFalseTrue 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;

      } 

アップデート:

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

      } 
4

1 に答える 1

2

「True」または「False」を文字列として DB に保存する場合は、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.
于 2013-01-15T22:29:22.407 に答える