Рассчитать рейтинг для 5 звезд в зависимости от отзывов

#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
}
  

Это всего лишь простой пример. К этому можно подойти по-разному. Вам нужно настроить его в соответствии с вашими потребностями и попробовать, работает ли он для вас.

Я сделал это очень быстро, поэтому не тестировал. Пожалуйста, проверьте и посмотрите, подходит ли он вам. Я просто хотел дать вам идею.