1

私は一連の回答と学生の回答を持っています。私がやりたいことは、各質問について、個々の学生の回答が個々の回答と一致する場合、個々の学生の回答を緑色で表示し、個々の学生の回答が回答に含まれていない場合、その個々の学生の回答を赤で表示することです。

例えば:

たとえば、次のようになります。

Answer: B,C
Student Answer: B,D

上記の出力では、学生の回答 B は回答 B と一致するため緑色で表示されますが、回答に D がないため、学生の回答 D は赤色で表示されます。しかし、現在のコードでは、両方の生徒の回答が赤で表示されています。

この問題を解決するには?

以下のコード:

        if($questionData['answer'] == $questionData['studentanswer'])
{
    echo '<td width="30%" class="studentanswer green"><strong>'.htmlspecialchars($questionData['studentanswer']).'</strong></td>' . PHP_EOL;
    $check = true;
}
else
{
    echo '<td width="30%" class="studentanswer red"><strong>'.htmlspecialchars($questionData['studentanswer']).'</strong></td>' . PHP_EOL;
    $check = false;
}

アップデート:

上記の例に対して次のようにします。

print $questionData['answer'];
print $questionData['studentanswer'];

私はこの出力を得る:

B,CB,D
4

2 に答える 2

1

$questionData['answer'];内容が「B、C」の文字列です。したがって、文字列の一部のみを比較する必要があります。同様に、$questionData['studentanswer']も文字列です。それらを分解して、メンバーごとに値を比較できます。これでうまくいくはずです。

$RealAn = explode (',', $questionData['answer']);
$StudedntAn = explode (',', $questionData['studentanswer']);

// This error is from the way $questionData['answer'] is formatted.
// 'D,A,,C' should also work but 'D, A,B,C' won't
if (count($RealAn) != count($StudedntAn))
  echo "There was a problem with your answers.";

// Apparently you only want a row of the table with all the results, outside the loop
echo '<td width="30%" class="studentanswer"><strong>';

// Initialize the checking parameter as not null (so it's safe to use it later)
$check = TRUE;

// Iterate for as many array members as there is
for ($i = 0; $i < count ($StudentAn); $i++)
  {
  // Save what kind this particular member is
  $class = ($RealAn[$i] == $StudentAn[$i]) ? 'green' : 'red';

  // Display each member with the color previously associated to it
  echo '<span class = "' . $class . '">' . htmlspecialchars($StudentAn[$i]) . '</span>';

  if ($i != count($StudentAn)-1)
    echo ', ';

  // If only one of the members is not the same, $check will be false
  if ($class == 'red')
    $check = FALSE;
  }

echo '</strong></td>';
于 2013-03-08T13:24:46.853 に答える