#php
#php
Вопрос:
У меня есть хорошие отзывы, и у меня есть плохие отзывы. Мне нужно рассчитать рейтинг по этим отзывам для публикации.
Пример:
- У сообщения 1 есть 1 хороший отзыв и 2 плохих отзыва
- Сообщение 2 имеет 12 хороших отзывов и 5 плохих отзывов
- Сообщение 3 имеет 0 хороших отзывов и 0 плохих отзывов
Как я могу рассчитать рейтинг? Мне нужно для публикации получить 5 звезд. Мне нужно набрать до 5 звезд или меньше. Может быть, мне нужна эта формула?
$score = ($good_reviews * $bad_reviews) / 5; //get rating stars
Но я не получаю 5 или меньшее число. Как я могу сделать это правильно?
Комментарии:
1. Вычисление среднего — это базовая арифметика. Возьмите сумму ваших значений и разделите на количество ваших значений.
2. @David Пример У меня 102 хороших отзыва и 2 плохих отзыва, как тогда я могу рассчитать?
$score = (102 2)/104
Я получаю неправильное значение. Я получаю 1.3. Ну, если значение каждого отзыва равно 1, то среднее значение всех отзывов, безусловно, будет равно 1. Каково числовое значение «хорошего» отзыва и каково числовое значение «плохого» отзыва в вашем случае?
4. @David У меня 102 хороших отзыва, почему я получаю рейтинг 1? Может быть, нужно иметь рейтинг 3,5?
5. @David Пример У меня 0 плохих отзывов, затем:
(102 0)/102
и я получаю1
. Почему??
Ответ №1:
Может быть, вы хотите это:
$rating = $good_reviews
? intval ( 5.4 * $good_reviews / ( $good_reviews $bad_reviews))
: 0;
А теперь шаг за шагом:
SUM := $good_reviews $bad_reviews
является суммой всех отзывов.RATE := $good_reviews / SUM
это общий рейтинг $ good_reviews к сумме отзывов. Результат находится в диапазоне от 0.000 до 1.000 .- Умножение его на 5.4 расширяет диапазон до 0.000 — 5.400. Немного сложно разрешить несколько плохих голосов за рейтинг 5 звезд. Коэффициент может быть любым числом от 5000 до 5.9999999.
intval()
уменьшает число до int от 0 до 5 (ваши звезды).- Альтернатива by
?:
позволяет избежать ошибки деления на ноль.
Ответ №2:
Эта формула не даст вам того, что вам нужно. Он будет только умножать хорошее на плохое и делить на 5. Например ((100 хороших * 20 плохих) / 5) = 400. Выход из 5!
Если вам нужно набрать до пяти звезд, вам нужно будет использовать диапазоны.
Вычислите процент между хорошим и плохим, а затем выполните проверку if.
Например:
$percentage = (($good - $bad) / $good) * 100;
if($percentage => 100) {
//5 starts
} else if ($percentage < 100 amp;amp; $percentage => 80) {
//4 stars
} else if ($percentage < 80 amp;amp; $percentage => 60) {
//3 stars
} else if ($pecentage < 60 amp;amp; $percentage => 40) {
//2 starts
} else {
//1 star
}
Это всего лишь простой пример. К этому можно подойти по-разному. Вам нужно настроить его в соответствии с вашими потребностями и попробовать, работает ли он для вас.
Я сделал это очень быстро, поэтому не тестировал. Пожалуйста, проверьте и посмотрите, подходит ли он вам. Я просто хотел дать вам идею.