【问题标题】:Star rating with half star support星级评分,半星支持
【发布时间】:2019-05-31 13:49:55
【问题描述】:

我在渲染星级时遇到了问题,我希望我能得到一些额外的关注。我的正常评级对整数工作得很好,但我很难显示半星。例如,我创建了一个为我提供 0-5 评级的服务,所以我得到的值是 2.5、3 或 5 等...

在我去创建一个 switch case 并为每个变体创建一个 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\">";
      }
    }
?>

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

【问题讨论】:

    标签: php html svg


    【解决方案1】:

    可能有一种更简单的方法,但这很有效,检查 $starRating 是否为浮点数,然后将其向上取整并检查 $i 以将半星放置在正确的位置。

    <?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\">";
         }
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      您可以验证 $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"(表示 0.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 等)的浮点值。

      希望对你有帮助……

      【讨论】:

        猜你喜欢
        • 2021-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-14
        相关资源
        最近更新 更多