带有半星支持的星级

时间:2019-01-05 01:47:42

标签: php html svg

我遇到了星级评定问题,希望我能对此问题多加关注。我的正常评级与整数相符,但我很难显示半星。例如,我创建了一项为我提供0-5评分的服务,因此我得到了2.5、3或5等一个值

在我创建一个开关盒并为每个变体创建一个svg之前,我希望能得到一点指针。以下是我目前所拥有的,任何提示将不胜感激。

<?php
     for ($i = 1; $i <= $totalRating; $i++) {
     if($starRating < $i ) {
        echo "<img src=\"/icons/star-empty.svg\">";
      }
      else {
        echo "<img src=\"/icons/star.svg\">";
      }
    }
?>

理想情况下,我想在循环的末尾添加一个条件,并检查一半并回显“”;

2 个答案:

答案 0 :(得分:1)

可能有一种更简单的方法,但这可行,检查$starRating是否为浮点数,然后将其四舍五入并与$i进行比较,以将半星放置在正确的位置。 / p>

<?php
$totalRating = 5;
$starRating = 2.5;

for ($i = 1; $i <= $totalRating; $i++) {
     if($starRating < $i ) {
        if(is_float($starRating) && (round($starRating) == $i)){
            echo "<img src=\"/icons/star-half.svg\">";
        }else{
            echo "<img src=\"/icons/star-empty.svg\">";
        }
     }else {
        echo "<img src=\"/icons/star.svg\">";
     }
}
?>

答案 1 :(得分:0)

您可以验证 $ starRating 的值是否为整数,执行以下操作(仅考虑一半的值):

<?php
     for ($i = 1; $i <= $totalRating; $i++) {
     if ($starRating < $i ) {
        echo "<img src=\"/icons/star-empty.svg\">";
     } elseif(is_int($starRating) === false) {
        echo "<img src=\"/icons/star_half.svg\">";
     } else {
        echo "<img src=\"/icons/star.svg\">";
      }
    }
?>

如果要以更精确的值显示星星,则可以使用名称中的浮点值创建图像,例如“ star-3.svg” (代表.3浮点值,并且做这样的事情:

<?php
     for ($i = 1; $i <= $totalRating; $i++) {
     if ($starRating < $i ) {
        echo "<img src=\"/icons/star-empty.svg\">";
     } elseif(is_int($starRating) === false) {
        echo "<img src=\"/icons/star-" . floatval($starRating)) . ".svg\">";
     } else {
        echo "<img src=\"/icons/star.svg\">";
      }
    }
?>

但是在这种情况下,您需要注意只接收一个数字(2.2、3.4等)的浮点值。

希望对您有帮助...