PHP:从数字中显示完整/半/空星

时间:2013-09-29 16:52:26

标签: php

我有:fullstar.png,halfstar.png,greystar.png

<?php
$average_stars = round(4);
for($i=0; $i<$average_stars; $i++)
{
    ?>
    <img src="<?php echo url::site('images/desktop/fullstar.png'); ?>" />
    <?php
}
for($i=5; $i>$average_stars; $i--)
{
    ?>
    <img src="<?php echo url::site('images/desktop/greystar.png'); ?>" />
    <?php
}
?>

这给了我,现在当$ average_stars为4时,四个全明星和一个灰星。

完美无缺。

现在我希望这个可以工作并显示半星。

所以如果是4.5,最后一颗星应该是半星。

我该怎么做?我想我需要先使它工作,所以round()向上舍入到最接近的整数或最接近的.5

6 个答案:

答案 0 :(得分:1)

使用半星时,从0到5星排名与使用10颗全明星有点相同。

一旦你的10星排名起作用,关键是根据指数使用不同的图像:每个偶数指数应该是恒星的左边部分,右边应该是恒星的右边部分。 / p>

答案 1 :(得分:1)

<?php

$cfg_min_stars = 1;
$cfg_max_stars = 5;

$average_stars = 3.76;
$temp_stars = $average_stars;

for($i=$cfg_min_stars; $i<=$cfg_max_stars; $i++) {
  if ($temp_stars > 1) {
    print 'FULL ';
    $temp_stars--;
  }
  else {
    if ($temp_stars > 0.5) {
      print 'HALF ';
      $temp_stars -= 0.5;
    }
    else {
      print 'GREY ';
    }
  }

}

?>

答案 2 :(得分:0)

我想你会把它输出到html。

你可以制作两张最多星星的图像(一张用于完整,一张用于灰色)。将灰色星星放在父DIV背景中。然后在第一个div中添加另一个div。此时背景设置为全星图像,并将其宽度设置为第一个的百分比。别忘了设置溢出:隐藏在这个div上。

我没有检查过该代码,但它看起来像这样:

<div style="background-image:url(grey-5-stars.png); width: 50px;">
<div style="background-image:url(full-5-stars.png); width: <?= (50 * $stars / $maxStars) ?>px; ">
&nbsp;
</div>
</div>

现在你总是显示所有灰色星星,并用一定比例的满星覆盖它们。这样你就不会被半个星星限制了。

答案 3 :(得分:0)

非常简单:

<?php
$stars=4.7449;
$average_stars = round($stars*2)/2;
for($i=0; $i<floor($average_stars); $i++)
{
    ?>
    <img src="<?php echo url::site('images/desktop/fullstar.png'); ?>" />
    <?php
}
if(floor($average_stars)!=$average_stars)
{?>
   <img src="<?php echo url::site('images/desktop/halfstar.png'); ?>" />
<?php
}

for($i=5; $i>ceil($average_stars); $i--)
{
    ?>
    <img src="<?php echo url::site('images/desktop/greystar.png'); ?>" />
    <?php
}

答案 4 :(得分:0)

<?php

    $number = 3.5;
    $average_stars = round($number * 2) / 2;
    $drawn = 5;
    for ($i = 0; $i < floor($average_stars); $i++)
    {
        $drawn--;
        echo ' fullstar';
    }

    if ($number - floor($average_stars) == 0.5)
    {
        $drawn--;
        echo ' halfstar';
    }

    for($i = $drawn; $i > 0; $i--)
    {
        echo ' greystar';
    }

?>

答案 5 :(得分:0)

为了好玩......

查看直播:http://sandbox.onlinephpfunctions.com/code/84c3a6d9de3170227841d6fd3dce0c2a0b10dd9e

<?php

    $stars_for_fun = function($avg, $max) {
      $avg = round($avg, 2);
      $starly = str_repeat('FULL ', floor($avg)).str_repeat('HALF ', round( ($avg-floor($avg)), 0, PHP_ROUND_HALF_UP)).str_repeat('GREY ', round(($max-$avg)-0.01, 0, PHP_ROUND_HALF_UP) );
      print $avg.': '.$starly.'<br>';

    };

    //$cfg_min_stars = 1;
    $cfg_max_stars = 5;

    $stars_for_fun(3.76, $cfg_max_stars);
    $stars_for_fun(3.5, $cfg_max_stars);
    $stars_for_fun(2.51, $cfg_max_stars);
    $stars_for_fun(2.49, $cfg_max_stars);
    $stars_for_fun(2.01, $cfg_max_stars);
    $stars_for_fun(1.99, $cfg_max_stars);
    $stars_for_fun(0.99, $cfg_max_stars);
    $stars_for_fun(0.51, $cfg_max_stars);
    $stars_for_fun(0.50, $cfg_max_stars);
    $stars_for_fun(0.49, $cfg_max_stars);
    $stars_for_fun(0.01, $cfg_max_stars);

?>