2016-07-11 35 views
1

如何使用php对此测试进行评分?我需要一个百分比...在php中使用加权平均数进行评分

我有一系列的问题,包含正确/不正确的布尔和相应的重量。

我需要先找到正确答案的平均值吗?

方程是什么?

$questions = array(
    0=>array(
     'Question'=>"Some Question", 
     'Correct'=>true, 
     'Weight'=>5, 
    ), 
    1=>array(
     'Question'=>"Some Question", 
     'Correct'=>false, 
     'Weight'=>5, 
    ), 
    2=>array(
     'Question'=>"Some Question", 
     'Correct'=>true, 
     'Weight'=>4, 
    ), 
    3=>array(
     'Question'=>"Some Question", 
     'Correct'=>true, 
     'Weight'=>0, 
    ), 
    4=>array(
     'Question'=>"Some Question", 
     'Correct'=>false, 
     'Weight'=>5, 
    ), 
    5=>array(
     'Question'=>"Some Question", 
     'Correct'=>true, 
     'Weight'=>4, 
    ), 
); 
$weights = array(
    0=>0 
    1=>0 
    2=>.05 
    3=>.20 
    4=>.25 
    5=>.50 
); 
$totalQuestions=0; 
$correctAnswers=0; 
$points=0; 
foreach($questions as $question){ 
    $totalQuestions++; 
    if($question['Correct']){ 
     $correctAnswers++; 
     $points = $points = $weights[$question['Weight']; 
    } 
} 

回答

0

可以计算权重的候选人赢得的金额(即你有个点),然后将总的权重可能(即满分)。

然后你就可以将通过总分考生的分数:

得分=候选得分/总比分

从那里,你可以计算出百分比:

百分比=分数* 100

使用代码:

$totalQuestions=0; 
$totalWeights=0; 
$correctAnswers=0; 
$weightsEarned=0; 
foreach($questions as $question){ 
    $totalQuestions++; 
    $totalWeights+=$weights[$question['Weight']]; 
    if($question['Correct']){ 
     $correctAnswers++; 
     $weightsEarned += $weights[$question['Weight']]; 
    } 
} 

echo "Score Overview: "; 
echo "<br/>Weights Earned: " . $weightsEarned; 
echo "<br/>Correct Answers: " . $correctAnswers; 
echo "<br/>Total Weights Possible : " . $totalWeights; 
echo "<br/>Percentage Earned: " . ($weightsEarned/$totalWeights) * 100; 
0

通常的平均(加权或不)是事物超过总的可能的事情的总和。如果它的加权通常意味着每件事情不是1件事情,但实际上是weightOfThing事情。

例子:

$totalQuestions = count($questions); //No need to increment 
$totalWeight = 0; //Could do a sum here but no need 
$weightedSum = 0; 
foreach($questions as $question){ 
    $totalWeight += isset($question["Weight"])?$question["Weight"]:0; //Assume a question with no weight has 0 weight, i.e., doesn't count. Adjust accordingly 
    if($question['Correct']){ 
     $weightedSum += isset($question["Weight"])?$question["Weight"]:0; 
    } 
} 
$weightedAverage = $weightedSum/$totalWeight; 
0

可以优化,但这里是已完成的公式:

$weights = array(
    0=>0, 
    1=>0, 
    2=>.05, 
    3=>.20, 
    4=>.25, 
    5=>.50, 
); 

$byWeight = array(); 
foreach($questions as $question){ 
    //$totalQuestions++; 
    $byWeight[$question['Weight']]['TotalNumberOfQuestionsForWeight']++; 
    if($question['Correct']){ 
     $byWeight[$question['Weight']]['CorrectAnswers']++; 
    } 
} 

$totalWeightsSum = 0; 
foreach($byWeight as $weight => $data){ 
    $totalWeightsSum = $totalWeightsSum + (($data['CorrectAnswers']/$data['TotalNumberOfQuestionsForWeight']) * $weights[$weight]); 
} 

echo '<pre>'.var_export($byWeight,1).'</pre>'; 
echo $totalWeightsSum/array_sum($weights);