在 php 中使用加权平均评分
Grading using weighted averages in 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'];
}
}
通常,平均值(加权或未加权)是所有可能事物的总和。如果它被加权,通常意味着每件事不是 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;
您可以计算候选人获得的权重(即您拥有的分数)以及可能的总权重(即满分)。
然后可以将候选分数除以总分:
Score = Candidate score / Total Score
从那里你可以计算百分比:
Percentage = Score * 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;
可以优化,但这里是完整的等式:
$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);
我怎样才能用 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'];
}
}
通常,平均值(加权或未加权)是所有可能事物的总和。如果它被加权,通常意味着每件事不是 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;
您可以计算候选人获得的权重(即您拥有的分数)以及可能的总权重(即满分)。
然后可以将候选分数除以总分:
Score = Candidate score / Total Score
从那里你可以计算百分比:
Percentage = Score * 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;
可以优化,但这里是完整的等式:
$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);