我使用此代码来显示带有半满星的平均评分(如果平均评分不是整数)。效果很好。
<?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;
?>
但结果,我自然达不到这个结果。这是我得到的:
你看,第四颗星里没有一半。我认为可以将这两个代码片段结合起来,但我的知识还不够,如何做到这一点。或者也许这根本不可能。请帮助解决这个问题。
弑天下
Qyouu