如何使用PHP将数字转换为星级?

时间:2016-02-08 15:01:33

标签: javascript php jquery mysql

我有一个页面,我需要显示星级评分系统。将数字转换为视觉星形图像。我有1.5,2,2.5,.. 5.0。我有一个代码显示转换数字但5.0显示6星

遵循此代码

Converting numbers to visual rating (stars)?

  $starNumber = 5.0;

  for ($x = 1; $x <= $starNumber; $x++) {
      echo '<li><i class="fa fa-star"></i></li>';
  }
  if (strpos($starNumber, '.')) {
      echo '<li><i class="fa fa-star-half-o"></i></li>';
      $x++;
  }
  while ($x <= 5) {
      echo '<li><i class="fa fa-star-o"></i></li>';
      $x++;
  }

显示为6星

6 个答案:

答案 0 :(得分:3)

我的解决方案:

for( $x = 0; $x < 5; $x++ )
{
    if( floor( $starNumber )-$x >= 1 )
    { echo '<li><i class="fa fa-star"></i></li>'; }
    elseif( $starNumber-$x > 0 )
    { echo '<li><i class="fa fa-star-half-o"></i></li>'; }
    else
    { echo '<li><i class="fa fa-star-o"></i></li>'; }
}

PhpFiddle demo

只有一个foor循环,我将floor的{​​{1}}值(浮动向下舍入)与当前$starNumber值进行比较以回显全星;否则如果没有舍入值大于当前$x我回声半星;否则(值低于当前$x)我回显空星。

答案 1 :(得分:0)

$starLimit  = 5;
$liStarRate = "";
for($star=1; $star<=$starLimit; $star++) {
    //this holds .5 values
    $liStarRate.='<li star-rate="'.($star-.5).'"><i class="fa fa-star-half-o"></i></li>';
    //this holds the whole values
    $liStarRate.='<li star-rate="$star"><i class="fa fa-star-o"></i></li>';
}

使用如上所述的简单循环语句,其中不需要任何条件语句,因为每个整数都可以通过简单地减去0.5而变为浮点数。

答案 2 :(得分:0)

在这里,我想帮助其他正在寻找树枝模板解决方案的人....

{% for x in 0..4 %}
   {% if book_data.averageRating|round(2, 'floor') - x >= 1 %}
        <i class="fa fa-star gold"></i>
        {% elseif book_data.averageRating - x > 0 %}
        <i class="fa fa-star-half-o gold"></i>
          {% else %}
        <i class="fa fa-star-o"></i>
   {% endif %}
{% endfor %}

答案 3 :(得分:0)

PHP:

function stars($rating){
    for($i = 0; $i < 5; $i++){
        if($i < $rating){
            echo "<i class='fas fa-star glow'></i>";
        } else {
            echo "<i class='fas fa-star'></i>";
        }
    }
}

CSS:

.glow {
   color: yellow;
}

然后像这样使用它:

stars(4);

我为此使用了FontAwesome v5.5.0。

答案 4 :(得分:0)

我实际上最终只是从事类似的工作。感到有点失望,发现这里的答案似乎只适用于满星(1-5级),而我想要半星(1-10级)

我最终创建了这个:

https://dev.flurosat.com/**

0的输出将是5个空白星。 10的输出将是5个满星。 5个的输出将是2个全星,1个半星,2个空白星。

答案 5 :(得分:-1)

arr