0
  $answers = array("a", "b", "c", "a", "a", "a");
  $S1Q1 = $_POST['S1Q1'];
  $S1Q2 = $_POST['S1Q2'];

  $S2Q1 = $_POST['S2Q1'];
  $S2Q2 = $_POST['S2Q2'];
  $S2Q3 = $_POST['S2Q3'];
  $S2Q4 = $_POST['S2Q4'];

  $totalValue .= "About OM | Question 01: " . $S1Q1 . "    " . ($S1Q1 == $correct[0]) ? 'Correct' : 'Wrong' . "\n";
  $totalValue .= "        | Question 02: " . $S1Q2 . "    " . ($S1Q2 == $correct[1]) ? 'Correct' : 'Wrong'  . "\n\n";

    $totalValue .= "About EHS         | Question 01: " . $S2Q1 . "    " . ($S2Q1 == $answers[2]) ? 'Correct' : 'Wrong' . "\n";
    $totalValue .= "                   | Question 02: " . $S2Q2 . "    " . ($S2Q2 == $answers[3]) ? 'Correct' : 'Wrong' . "\n";
    $totalValue .= "                   | Question 03: " . $S2Q3 . "    " . ($S2Q2 == $answers[4]) ? 'Correct' : 'Wrong' . "\n";
    $totalValue .= "                   | Question 04: " . $S2Q4 . "    " . ($S2Q2 == $answers[5]) ? 'Correct' : 'Wrong' . "\n\n";

上記のphpスクリプトがありますが、ループ内のユーザーの正解数と不正解数を計算してパーセンテージを計算するために使用できるメソッドまたは関数は何ですか?


正しい:4
間違っている:2
合計:6
正しいパーセンテージ:((4/6)* 100)= 66.666666666%=> 66%に丸める

4

3 に答える 3

1

これは、すでに持っているものを変更せずにそれを達成するための迅速で汚い方法です:

$correct = substr_count($totalValue, "Correct\n");
$wrong = substr_count($totalValue, "Wrong\n");
$total = $correct + $wrong;
$percentage = floor($correct / $total * 100);


そうは言っても、これはもっとうまくできると思います。変数を配列として渡します。投稿文字列は次のようになります。

answers[s1][q1]=a&answers[s1][q2]=b&answers[s2][q1]=c&answers[s2][q2]=a

これは、次のようにPHPによって受信されます。

answers => Array(
    's1' => Array(
        'q1' => 'a',
        'q2' => 'b'
    ),
    's2' => Array(
        'q1' => 'c',
        'q2' => 'a'
    )
)

この例を見てください。見た目は少し長く、おそらくもう少し複雑ですが、はるかに柔軟で拡張可能です。質問や回答などを追加する必要がある場合は、対応する配列エントリを追加するだけです。長い目で見れば、あなたはそれでもっと幸せになると思います。

于 2012-09-14T19:28:33.320 に答える
1

個別の変数の代わりに、配列を操作する必要があります。たとえば、これの代わりに

$S2Q1 = $_POST['S2Q1'];
$S2Q2 = $_POST['S2Q2'];
$S2Q3 = $_POST['S2Q3'];
$S2Q4 = $_POST['S2Q4'];

そのようなことをします:

$s2 = array();
for ($i=1; $i <= 4; $i++) {
    $s2[$i] = $_POST['S2Q'.$i];
}

など...構文の不具合の可能性はご容赦ください。PHPを実行してからしばらく経ちました:-)

于 2012-09-14T19:30:46.213 に答える
1

理想的には、$correct配列内で、キーを質問の名前と同じにする必要があります(たとえばS1Q1S2Q1...など)。これにより、任意の質問に対する回答を検索できます。次に、質問をループして、その質問の正しい答えを検索し、正しいカウントを維持できます。何かのようなもの:

//array of correct answers
$correct = array("S1Q1"=>"a", "S1Q2"=>"b", "S2Q1"=>"c", "S2Q2"=>"a", "S2Q3"=>"a", "S2Q4"=>"a");

$correctCount = 0;
$totalValue = '';

//loop through posted answers and check
foreach($_POST as $question=>$answer){
    //check if there is an answer for this question.
    if(array_key_exists($correct, $question)){
        $totalValue .= "Question {$question}: ".($correct[$question]==$answer?'Correct':'Wrong').'<br>';
        $correctCount += ($correct[$question]==$answer?1:0);
    }
}
$pct = round($correctCount/count($correct)*100);

$totalValue .= "You got {$correctCount} out of ".count($correct)." ({$pct}%) answers correct.";
于 2012-09-14T19:46:19.670 に答える