【发布时间】:2026-02-22 18:05:01
【问题描述】:
我使用此代码显示带有半满星的平均评分(如果平均评分不是整数)。效果很好。
<?php
$stars = '';
for ( $i = 1; $i <= $avrating + 1; $i++ ) {
$width = intval( $i - $avrating > 0 ? 20 - ( ( $i - $avrating ) * 20 ) : 20 );
if ( 0 === $width ) {
continue;
}
if($avrating < 5){
$stars .= '<span style="overflow:hidden; width:' . $width . 'px" class="dashicons dashicons-star-filled"></span>';
if ( $i - $avrating > 0 ) {
$stars .= '<span style="overflow:hidden; position:relative; left:-' . $width .'px;" class="dashicons dashicons-star-empty"></span>';
}
}
}
if($avrating >= 5){
for ($i = 1; $i <= 5; $i++) {
echo '<span style="overflow:hidden;" class="dashicons dashicons-star-filled"></span>';
}
}
echo $stars;
?>
但是,在这种情况下,并未显示所有星星。例如,如果评分为 3.5,则显示 4 颗星,第四颗为半满。这是图像:1:https://i.stack.imgur.com/2aoGx.png 但我需要显示所有五颗星:最后一个空的第四个是半满的(例如,如果评级是 3.5),前三个是满的。我可以带出所有的星星。使用此代码:
<?php
$stars = '';
for ( $i = 1; $i <= 5 ; $i ++ ) {
if ( $i <= $avrating ) {
$stars .= '<span class="dashicons dashicons-star-filled"></span>';
} else {
$stars .= '<span class="dashicons dashicons-star-empty"></span>';
}
}
echo $stars;
?>
你看,第四颗星没有一半。我认为可以将这两个代码片段结合起来,但是我的知识还不够。或者这根本不可能。请帮忙解决这个问题。
【问题讨论】: