Оценка с использованием средневзвешенных значений в 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'];
    }
}

person Cybervanes    schedule 11.07.2016    source источник


Ответы (3)


Вы можете рассчитать количество весов, которые заработал кандидат (т. е. баллы, которые у вас есть), а затем общее количество возможных весов (т. е. высший балл).

Затем вы можете разделить балл кандидата на общий балл:

Оценка = оценка кандидата / общая оценка

Оттуда вы можете рассчитать процент:

Процент = Оценка * 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;
person Chad Fisher    schedule 11.07.2016

Обычно среднее (взвешенное или нет) представляет собой сумму вещей по общему количеству возможных вещей. Если это взвешено, это обычно означает, что каждая вещь не является 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;
person apokryfos    schedule 11.07.2016

можно оптимизировать, но вот полное уравнение:

$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);
person Cybervanes    schedule 13.07.2016