将数字转换为视觉评级(星级)?

时间:2012-04-20 17:31:35

标签: php rating-system

在我的数据库中有数字122.533.544.55

我想将这些数字转换成星星。

我有一颗满星和半星。

从数据库获取信息后如何做到这一点?

我在数据库上有评级标记。

5 个答案:

答案 0 :(得分:27)

<?php
    for($x=1;$x<=$starNumber;$x++) {
        echo '<img src="path/to/star.png" />';
    }
    if (strpos($starNumber,'.')) {
        echo '<img src="path/to/half/star.png" />';
        $x++;
    }
    while ($x<=5) {
        echo '<img src="path/to/blank/star.png" />';
        $x++;
    }
?>

*假设您使用的是PHP

答案 1 :(得分:7)

当我在过去做过这个时,我在一张5颗满星的图像下面使用了一张5颗空星的图像。然后我做了类似

的事情
filled-stars.width = (empty-stars.width * (rating / 5)

这样您就可以显示类似3.2978等的评级。

答案 2 :(得分:2)

你可以用PHP,HTML和CSS做到这一点:

<div class="star-<?=$number?>">
    <b></b><b></b><b></b><b></b><b></b>
</div>

然后您可以使用CSS设置样式,以便根据星星显示背景图像。如果您将<b>代码转换为<a>代码,则可能更具语义性。

答案 3 :(得分:1)

考虑使用sprites。从包含每行可能评级的一行星形的图形开始,然后通过将每个半星图形的高度乘以评级中的半星数来计算背景偏移。

E.g:

<?php
$offset =
    ($rating / .5)  // number of half-stars in $rating
  * 15;             // height of each sprite in stars.png
?>
<div style="background-image:url("stars.png");background-position:0 <?php echo $offset; ?>px;"></div>

结合一点Javascript,你可以implement a fully-featured ratings widget

答案 4 :(得分:1)

此处,如果需要echo '*';,这会增加星星echo '+';和一半。{。} 例如,将'*''+'更改为<img src="star.gif" /><img src="halfstar.gif" />

// This number of stars:
$number = 2.7;

// Make it integer:
$stars = round( $number * 2, 0, PHP_ROUND_HALF_UP);

// Add full stars:
$i = 1;
while ($i <= $stars - 1) {
    echo '*';
    $i += 2;
}
// Add half star if needed:
if ( $stars & 1 ) echo '+';