puks1978
puks1978

Reputation: 3697

PHP rating system

I have a table (review) which stores the values (1-5) for ratings. I will use the sum of these ratings for the overall score.

I have 5 stars on the page which will show on or off depending on the overall value.

I have the overall score by counting the total value of all the ratings divided by the number of reviews in the table. This give a value below 5 every time...great.

However I now have a problem where the value could either be 1.5 or 1.75 for instance. If the value is 1.5 I will show 1 and a half stars on and 3 and a half stars off. How should I determine if the value is 1.75 to show only the 1.5 value star.

Hope that makes sense.

Upvotes: 1

Views: 544

Answers (2)

Maxime Pacary
Maxime Pacary

Reputation: 23001

<?php

$tests = array(-1, 0, 0.25, 0.5, 1, 1.5, 1.75, 3, 4.22, 6);

foreach($tests as $test)
  echo "Initial rate = ".$test.", adjusted rate = ".adjustRate($test)."\n";

function adjustRate($val)
{
  if ($val < 0)
    return 0;

  if ($val > 5)
    return 5;

  return floor($val * 2) / 2;
}

Gives for example:

Initial rate = 1.75, adjusted rate = 1.5

Upvotes: 0

Steve Lewis
Steve Lewis

Reputation: 1302

That should be a simple math problem, since your resolution is 1/2, multiply by two, round it, then divide by 2:

round(x * 2) / 2

round((1.75) * 2) / 2 = 2
round((1.65) * 2) / 2 = 1.5

Upvotes: 1

Related Questions