我有一个页面,我需要显示星级评分系统。将数字转换为视觉星形图像。我有1.5,2,2.5,.. 5.0。我有一个代码显示转换数字但5.0显示6星
遵循此代码
Converting numbers to visual rating (stars)?
$starNumber = 5.0;
for ($x = 1; $x <= $starNumber; $x++) {
echo '<li><i class="fa fa-star"></i></li>';
}
if (strpos($starNumber, '.')) {
echo '<li><i class="fa fa-star-half-o"></i></li>';
$x++;
}
while ($x <= 5) {
echo '<li><i class="fa fa-star-o"></i></li>';
$x++;
}
显示为6星
答案 0 :(得分:3)
我的解决方案:
for( $x = 0; $x < 5; $x++ )
{
if( floor( $starNumber )-$x >= 1 )
{ echo '<li><i class="fa fa-star"></i></li>'; }
elseif( $starNumber-$x > 0 )
{ echo '<li><i class="fa fa-star-half-o"></i></li>'; }
else
{ echo '<li><i class="fa fa-star-o"></i></li>'; }
}
的 PhpFiddle demo 强>
只有一个foor
循环,我将floor
的{{1}}值(浮动向下舍入)与当前$starNumber
值进行比较以回显全星;否则如果没有舍入值大于当前$x
我回声半星;否则(值低于当前$x
)我回显空星。
答案 1 :(得分:0)
$starLimit = 5;
$liStarRate = "";
for($star=1; $star<=$starLimit; $star++) {
//this holds .5 values
$liStarRate.='<li star-rate="'.($star-.5).'"><i class="fa fa-star-half-o"></i></li>';
//this holds the whole values
$liStarRate.='<li star-rate="$star"><i class="fa fa-star-o"></i></li>';
}
使用如上所述的简单循环语句,其中不需要任何条件语句,因为每个整数都可以通过简单地减去0.5而变为浮点数。
答案 2 :(得分:0)
在这里,我想帮助其他正在寻找树枝模板解决方案的人....
{% for x in 0..4 %}
{% if book_data.averageRating|round(2, 'floor') - x >= 1 %}
<i class="fa fa-star gold"></i>
{% elseif book_data.averageRating - x > 0 %}
<i class="fa fa-star-half-o gold"></i>
{% else %}
<i class="fa fa-star-o"></i>
{% endif %}
{% endfor %}
答案 3 :(得分:0)
PHP:
function stars($rating){
for($i = 0; $i < 5; $i++){
if($i < $rating){
echo "<i class='fas fa-star glow'></i>";
} else {
echo "<i class='fas fa-star'></i>";
}
}
}
CSS:
.glow {
color: yellow;
}
然后像这样使用它:
stars(4);
我为此使用了FontAwesome v5.5.0。
答案 4 :(得分:0)
我实际上最终只是从事类似的工作。感到有点失望,发现这里的答案似乎只适用于满星(1-5级),而我想要半星(1-10级)
我最终创建了这个:
https://dev.flurosat.com/**
0的输出将是5个空白星。 10的输出将是5个满星。 5个的输出将是2个全星,1个半星,2个空白星。
答案 5 :(得分:-1)
arr