2 回答
TA贡献1818条经验 获得超8个赞
我将创建一个简单的函数,它根据给定的评级返回给定星星的填充水平:
<?php
function getStarClass(int $starPosition, float $rating): string
{
if ($starPosition <= $rating) {
return 'filled';
}
if ($starPosition - $rating < 1) {
return 'half-filled';
}
return 'empty';
}
$avrating = 3.5;
?>
<?php for ($star = 1; $star <= 5; $star++): ?>
<span class="dashicons dashicons-star-<?= getStarClass($star, $avrating) ?>"></span>
<?php endfor ?>
请注意,我还使用 PHP 的替代语法来显示 HTML,因为我相信它更适合该目的,但这完全是可选的。
TA贡献1786条经验 获得超11个赞
您可以添加一个额外的子句,检查循环是否大于评级但小于下一个评级作为半启动评级...
$stars = '';
for ( $i = 1; $i <= 5 ; $i ++ ) {
if ( $i <= $avrating ) {
$stars .= '<span class="dashicons dashicons-star-filled"></span>';
} elseif ( $i < $avrating + 1 && $i > $avrating ) {
$stars .= '<span class="dashicons dashicons-star-half"></span>';
} else {
$stars .= '<span class="dashicons dashicons-star-empty"></span>';
}
}
您还可以通过将其作为部件添加来减少大量重复的样板 HTML...
$stars = '';
for ( $i = 1; $i <= 5 ; $i ++ ) {
$stars .= '<span class="dashicons dashicons-star-';
if ( $i <= $avrating ) {
$stars .= 'full';
} elseif ( $i < $avrating + 1 && $i > $avrating ) {
$stars .= 'half';
} else {
$stars .= 'empty';
}
$stars .= '"></span>';
}
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报