0

うまくいけば、誰かが助けることができます!

私は週末に10問/多肢選択/多肢選択式のシナリオであるクイズを無事に完了しました-しかし、今朝の概要は変わりました-

たとえば、質問1は次のようになります。

Q How do you make tea
A) Water
B) Teabag
C) Cup
D) Fish Tank

クライアントは、ABCが正解ですが、他にも正解があることを望んでいます。たとえば、次のようになります。

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として保存していたので、すべてが機能していたので、元の配列を「分解」して、個々の配列要素にする必要があると思います(私はそれを想定していました)この方法で行う方が簡単です)-したがって、私の配列は次のようになります。

    Array ( [0] => A [1] => B [2] => C ) 

ifネストされたifステートメントを実行しようとしました:

    if($vex['0'] == 'A')
    {
    echo "Yup, it equals A";
    if($vex['1'] == 'B')
    {
    echo "Yup, it equals B";
    } 

しかし、配列が常に[0]=>Aなどで始まるとは限らないことに気づきました。

私を助け、正しい方向に向けることができますか?

チェックボックスを配列ではなく単一の値として格納し、チェックを行う方が簡単でしょうか?

4

3 に答える 3

1

配列を使用し、それらを交差させて、次のようなスコアを付けます。

$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
于 2013-01-28T17:07:09.623 に答える
0

in_array()関数を使用できると思います。

if(in_array('A',$vex))
{
    echo "Yup, it equals A";
    if(in_array('B',$vex))
    {
        echo "Yup, it equals B";
    }
}
于 2013-01-28T17:11:56.453 に答える
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

これは、彼らが少なくとも1つの権利を持っているかどうかを教えてくれます。より具体的にする必要がある場合は、次のことができます。

$aComparedAnswers = array();
foreach($aAnswers as $sAnswer){
    if(in_array($sAnswer, $aCorrectAnswers)){
        $aComparedAnswers[] = $sAnswer;
    }
}

次に、比較したアレイと正しいアレイを比較できます。彼らが同じ数を持っている場合、彼らはすべての質問を受けました。比較された回答の数は、正解の数と同じになります。

于 2013-01-28T17:13:01.833 に答える