以下のコードでは、条件に応じて AZ からの文字のリストを表示します$OptionType
(たとえば、OptionType が AD の場合、文字 ABCD を表示します)。次に、正解 ( $dbAnswer
) が削除されるため、不正解が表示されたままになります。
たとえば、正解はB
です。したがって、表示される不正解は AC D です。
これで、文字に対しては問題なく動作します。
私が抱えている問題は、オプションがTrue or False
またはYes or No
? たとえば、オプション タイプがTrue or False
で、True
が正しく、False
が正しくない場合、回答のみが表示False
されますが、代わりに回答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;
}
アップデート:
$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;
}