【发布时间】:2015-12-28 21:27:55
【问题描述】:
我正在根据来自 API 的输入显示星级评分(注意:仅显示,根本不接收评分)。以下代码完全按照我的需要工作,但它是一个非常大的逻辑,感觉它可以被大量简化。
我在这里阅读了一些其他票证,这些票证表明使用数组可能比开关盒更有效。但是因为逻辑取决于一个数字范围内的真值(比如大于 2.5 但小于 3)之间的每种情况,所以我不确定在这种情况下数组是否可以工作。
底线是:这段代码能否以某种方式大规模简化?
$stars = 3.5;
switch ($stars) {
case ($stars > 1 && $stars <= 1.5):
$star2 = 'dashicons-star-half';
$star3 = 'dashicons-star-empty';
$star4 = 'dashicons-star-empty';
$star5 = 'dashicons-star-empty';
break;
case($stars > 1.5 && $stars <= 2):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-empty';
$star4 = 'dashicons-star-empty';
$star5 = 'dashicons-star-empty';
break;
case($stars > 2 && $stars <= 2.5):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-half';
$star4 = 'dashicons-star-empty';
$star5 = 'dashicons-star-empty';
break;
case($stars > 2.5 && $stars <= 3):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-filled';
$star4 = 'dashicons-star-empty';
$star5 = 'dashicons-star-empty';
break;
case($stars > 3 && $stars <= 3.5):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-filled';
$star4 = 'dashicons-star-half';
$star5 = 'dashicons-star-empty';
break;
case($stars > 3.5 && $stars <= 4):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-filled';
$star4 = 'dashicons-star-filled';
$star5 = 'dashicons-star-empty';
break;
case($stars > 4 && $stars <= 4.5):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-filled';
$star4 = 'dashicons-star-filled';
$star5 = 'dashicons-star-half';
break;
case($stars > 4.5):
$star2 = 'dashicons-star-filled';
$star3 = 'dashicons-star-filled';
$star4 = 'dashicons-star-filled';
$star5 = 'dashicons-star-filled';
break;
default:
$star2 = 'dashicons-star-empty';
$star3 = 'dashicons-star-empty';
$star4 = 'dashicons-star-empty';
$star5 = 'dashicons-star-empty';
}
?>
<div class="wporg-ratings" title="<?php echo $stars; ?> out of 5 stars" style="color:#e6b800;">
<span class="dashicons dashicons-star-filled"></span>
<span class="dashicons <?php echo $star2; ?>"></span>
<span class="dashicons <?php echo $star3; ?>"></span>
<span class="dashicons <?php echo $star4; ?>"></span>
<span class="dashicons <?php echo $star5; ?>"></span>
</div>
【问题讨论】:
-
看起来填充星星的数量比实际的 $star 值少 1 对吗?意思是如果 $stars = 3.5 那么将有 2 个填充和 1 个半星。
-
@AbraCadaver 如果你低头看 html,第一个星总是被填满的。 ^^
-
是的,@Jon 是对的。在这个系统中,评论不可能少于 1 星,因此第 1 星总是被填满,这就是为什么它总是以 $star2 开头。
标签: php arrays switch-statement case