PHP интенсивность голосования / сила? - PullRequest
2 голосов
/ 12 января 2011

Что ж, я думаю о добавлении функции оценки в свое приложение, где участники могут голосовать между 1-5 (это $rating), и я отображаю средний балл как $score = $number_of_voters / $rating. Где $number_of_voters - это общее количество участников, проголосовавших по этому конкретному пункту, а $rating - это общий рейтинг по этому конкретному элементу.

Таким образом, $score не может быть выше 5 (что вне его).

Однако я думаю об интеграции интенсивности / силы голосования в соответствии с уровнем РПГ пользователей (число от 1 до 8, которое может постепенно увеличиваться - которое назначил каждый участник), так что если, например, они проголосовали и их Уровень RPG был 1, средний балл не будет слишком отличаться от предыдущего (не повлияет ли он на это слишком сильно), однако, если это будет что-то вроде 8, то это повлияет на него больше? (Слишком резюмируйте, что их уровень RPG будет рассмотрен внутри страны при голосовании).

Но не уверен, как действовать (как интегрировать / реализовывать), не влияя на первоначальную спецификацию (т. Е. Я не хочу, чтобы оценка была выше 5 (хочу, чтобы она была $ оценка <= 5)). </p>

Ответы [ 3 ]

2 голосов
/ 12 января 2011

Чтобы ответить на ваш ближайший вопрос, вы можете умножить на дробный вес 0-1. Если у вас есть разные уровни, вы можете получить этот вес, разделив уровень пользователя на максимальный уровень.

Но прежде чем вы начнете кодировать, вам следует прочитать Как не сортировать по среднему рейтингу , чтобы избежать некоторых распространенных ошибок с такой системой голосования.

1 голос
/ 12 января 2011

Каждый пользователь вносит (weight)*(rating) в общий рейтинг, поэтому числитель является суммой этого для всех пользователей.

Знаменатель - максимально возможная оценка, для каждого пользователя это (weight)*5. Таким образом, знаменатель является суммой этого для всех пользователей.

Затем вычислите балл как:

sum{ (user i's weight) * (user i's rating) } / sum{ (user i's weight) * 5 }

Заметьте, однако, что это дает вам оценку в диапазоне 0-1, если вы хотите, чтобы оценка в диапазоне 0-5 вы могли нормализовать на 5, это удаляет коэффициент 5 в знаменателе.

Предположим, у вас есть два массива, один из рейтингов ( i -й элемент соответствует i -ому рейтингу пользователя) $ratings и один из весов ( i -й элемент соответствует i -ому уровню RPG пользователя) $weights Вы можете вычислить это как:

$numer = 0;
$denom = 0;
for($i = 0; $i < count($ratings); $i++){
    $numer = $weights[$i]*$ratings[$i];
    $denom = $weights[$i];
}
$avg = $numer / $denom;
0 голосов
/ 12 января 2011

Попробуйте сделать что-то вроде этого ... Голосование пользователей уровня 1 считается за 1 голос, а голос пользователей уровня 8 считается за 8 голосов:

$thisvote = $level * $vote; 
//a user with a level 5, and a vote of 5...this is 25
$total = ($total + $thisvote) / $level + 1;
//if total was 4, 25+4 = 29, 29 / 6 = 4.83

Это проще, чем использовать массивы, если выфактически не хранит каждого пользователя, который проголосовал и каков был их голос.

...