Как создать рейтинговую систему используя цикл for в php yii2

Я работаю над проектом, где мне нужна система рейтингов. Я использую виджет kartik для оценки, но теперь мне нужен код, чтобы показать оценки. всего 5 звезд, если пользователь получает 4 звезды, тогда 4 звезды будут заполнены, а одна звезда будет пустой. Я сделал это на заказ, и мне нужен эффективный код.

    public static function rate($rate)
{
if (!is_null($rate)) {

if ($rate == 0){
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 1 && $rate < 1.5){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 1.5 && $rate < 2){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-half-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 2 && $rate < 2.5){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 2.5 && $rate < 3){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-half-o'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 3 && $rate < 3.5){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 3.5 && $rate < 4){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-half-o'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 4 && $rate < 4.5){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-o'></i>";
}
if ($rate >= 4.5 && $rate < 5){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star-half-o'></i>";
}
if ($rate >= 5){
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
echo "<i class='fa fa-star'></i>";
}
}
else
{
echo "<i style='color: red'>Not Yet rated</i>";
}
}

Как я могу сделать эту же работу с помощью цикла

1

Решение

Попробуйте что-то вроде этого:

public static function rate($rate)
{
if (!is_null($rate)) {
$rate_int = $rate/0.5;
for($i=1; $i<=floor($rate); $i++){
echo "<i class='fa fa-star'></i>";
}

if(($rate_int % 2) == 0) {
for($i=1; $i<=5-$rate; $i++) {
echo "<i class='fa fa-star-o'></i>";
}
}
else
{
echo "<i class='fa fa-star-half-o'></i>";
for($i=1; $i<=5-($rate+1); $i++){
echo "<i class='fa fa-star-o'></i>";
}
}
}
else
{
echo "<i style='color: red'>Not Yet rated</i>";
}
}
1

Другие решения

при условии, что у вас есть коллекция имен моделей пользователей $ userModels и в этой модели у вас есть имя поля $ rate для rate
Вы могли бы вызвать вашу статическую функцию

  foreach( $userModels as $key => $value){
YourClass::rate($value->rate);

}
0

По вопросам рекламы [email protected]