2013-03-08 2 views
1

J'ai un ensemble de réponses et de réponses d'étudiant. Ce que je veux faire est que pour chaque question, si une réponse individuelle correspond à une réponse individuelle, affichez la réponse individuelle en vert, si une réponse individuelle d'étudiant n'est pas dans la réponse, puis affichez cette réponse individuelle en rouge.Comment régler chaque réponse individuelle d'étudiant dans une couleur séparée

Par exemple:

Ainsi, par exemple:

Answer: B,C 
Student Answer: B,D 

La sortie de ce qui précède devrait afficher étudiant la réponse B en vert que vert correspond à la réponse B, mais réponse étudiant D devrait être rouge comme il est non D en réponse. Mais avec le code actuel, il affiche les deux réponses des étudiants en rouge.

Comment résoudre ce problème?

code ci-dessous:

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

MISE À JOUR:

Faire ce qui suit pour l'exemple ci-dessus:

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

je reçois cette sortie:

B,CB,D 
+0

Plus d'informations de préférence sous la forme d'un court exemple autonome est nécessaire, voir http://sscce.org/ – VolkerK

+0

Vous comparez actuellement la chaîne de réponse complète « B C » avec « B D ». Essayez de [[exploser]] (http://php.net/explode) les chaînes et comparez-les une par une. – hsan

+0

@hsan Vous aurez besoin d'aide pour écrire l'instruction éclatée. – user2048994

Répondre

1

$questionData['answer']; est une chaîne avec le contenu 'B, C'. Par conséquent, vous ne devriez comparer qu'une partie de la chaîne. De la même manière, $questionData['studentanswer'] est également une chaîne. Vous pouvez les faire exploser et ensuite comparer les valeurs membre par membre. Cela devrait faire l'affaire.

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

2 questions, un il me donne un avertissement indiquant ne peut pas utiliser une valeur scalaire dans un tableau et qui pointe sur les lignes où il affiche le '$ check [$ i]'. Une autre question est que je veux seulement '$ check [$ i] = true' ne se produise que si le' $ StudentAn' complet correspond au '$ RealAn' complet, et non à une partie de celui-ci. Si elle est partiellement ou complètement incorrecte, alors $ check [$ i] est faux. Mais comment cela peut-il être fait? – user2048994

+0

J'ai changé le code en supprimant la vérification $. L'utilisez-vous plus tard (donc en avez-vous besoin) ou seulement pour ce petit morceau de code? Selon l'utilisation, je suggère une autre façon de le faire. Je vais le changer maintenant pour la dernière question. –

+0

Fait, je n'avais aucune idée de comment $ check devait être utilisé. Espérons que cela fonctionne –

0

essayer ce

<head> 
    <style> 
      .red{color:red;} 
      .green{color:green;} 
    </style> 
    </head> 

<?php 
    echo GetAns("B D C","B C D F"); 

function GetAns($ans,$stuAns) 
{ 
    $arr_ans=explode(" ", $ans); 
    $arr_stu_ans=explode(" ",$stuAns); 
    $str=""; 
    for($cnt=0;$cnt<count($arr_stu_ans);$cnt++) 
    { 
     $stu_ans= $arr_stu_ans[$cnt]; 
     if(in_array($stu_ans,$arr_ans)) 
      $class="green"; 
     else 
      $class="red"; 
     $str.="<span class='$class'> $stu_ans </span> "; 
    } 
    return $str ; 


} 

?> 
Questions connexes