希望有人可以提供帮助!
我周末成功完成了我的测验,这是一个10个问题/多项选择/多种答案类型的情景 - 但是今天早上的情况有所改变 -
事实证明问题1例如:
Q How do you make tea
A) Water
B) Teabag
C) Cup
D) Fish Tank
客户希望A B C是正确的答案,还有其他正确的答案,例如: -
A - Is correct + 1 to score
B - Is correct + 1 to score
C - Is Correct + 1 to score
A & B - Is correct + 1 to score
A & C - Is correct + 1 to score
B & A - Is correct + 1 to score
B & C - Is correct + 1 to score
A & B & C - Is the Jackpot! + 1 to score
在此'修正'之前,我已将结果存储到问题数据库A,B,C中 - 所以一切正常 - 所以我相信我必须'爆炸'原始数组,因此它们是单独的数组元素(I假设这样做会更容易) - 所以我的数组现在看起来像这样:
Array ( [0] => A [1] => B [2] => C )
我试着做一个if if ifted语句:
if($vex['0'] == 'A')
{
echo "Yup, it equals A";
if($vex['1'] == 'B')
{
echo "Yup, it equals B";
}
但我意识到数组可能并不总是以[0] =>开头。等等。
可以帮助我并指出正确的方向吗?
对于我来说,将复选框存储为单个值而不是数组并进行检查会更简单吗?
答案 0 :(得分:1)
使用数组和intersect对它们进行评分:
$user_choices = array('A', 'C');
$valid_choices = array('A', 'B', 'C');
$common = array_intersect($user_choices, $valid_choices); // A,C
$score = count($common); // 2
同样地:
choices A -> common = A -> score = 1
choices D -> common = -> score = 0
choices A,B,C -> common = A,B,C -> score = 3
答案 1 :(得分:0)
我认为你可以使用in_array()函数。
if(in_array('A',$vex))
{
echo "Yup, it equals A";
if(in_array('B',$vex))
{
echo "Yup, it equals B";
}
}
答案 2 :(得分:0)
您可以使用array_intersect
或in_array
。
例如,如果他们检查了A和B,并且正确的答案是B和C,那么你可以这样做:
$aAnswers = array('A', 'B');
$aCorrectAnswers = array('B', 'C');
$bSuccess = count(array_intersect($aAnswers, $aCorrectAnswers) || false);
// $bSuccess == true
这会告诉你他们是否至少有一项权利。如果您需要更具体,可以这样做:
$aComparedAnswers = array();
foreach($aAnswers as $sAnswer){
if(in_array($sAnswer, $aCorrectAnswers)){
$aComparedAnswers[] = $sAnswer;
}
}
然后您可以比较比较和正确的数组。如果他们有相同的数量,他们就会得到所有的问题。比较答案的数量将等于正确答案的数量。