我有: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
答案 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; ">
</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);
?>