基本上我試圖做一個簡單的5星級評分系統,使用字體真棒類爲明星。如何使此PHP功能更有效
全明星
<i class="fa fa-star"></i>
無星級
<i class="fa fa-star-0"></i>
半星
<i class="fa fa-star-half-0"></i>
通過每個審查我的服務所以我喜歡環路下面看到:
$i=0;
$reviewRating = 0;
foreach($service['reviews'] as $review){
$i++;
$reviewRating += $review['rating'];
}
從這裏我現在有評論數量和所有評論總數加起來。
我通過這兩個值進入我的功能,如下圖所示:
function get_rating_stars($reviewRating,$i){
//rounding number to nearest .5
$rating = round($reviewRating/$i * 2)/2;
$cnt = 0;
$class = "";//class active gives the star a colour, if empty it shows as a empty star.
$zeros = false;//this is for when we have gone past the .5 meaning any further stars have to be a zero(empty star).
$starList ="";//This will be returned when built up
while($cnt < 5){//because there will always be 5 stars showing, regardless to full half or empty
if($zeros){
$starList.= '<li><i class="fa fa-star-o"></i></li>';
$cnt++;
}else{
if($rating == 0.5){
$starList.= '<li class="active"><i class="fa fa-star-half-o"></i></li>';
$zeros = true;//now we have output the half star all following will be empty
$cnt++;
}else{
//the first loop will normally start here unless rating starts at 0.5
if($rating > 0.5){$class = "active";}else{$class = "";}
$starList.= '<li class="'. $class .'"><i class="fa fa-star"></i></li>';
$cnt++;
$rating--;
}
}
}
return $starList;
}
所以這個功能我提出做這樣的伎倆,準確的工作如何我想它也一樣,但是它有重複這個過程爲頁面上的每一項服務。所以當我循環遍歷所有的服務時,我會循環執行每個檢查,然後執行此操作,這看起來有點過分了。
這個函數理論上可以調用20次,因爲我可以在一個頁面上顯示20個服務。
有誰知道我可以如何使這更有效?
它是否真的很慢?或者你只是在猜測(暗示 - 不要猜測,簡介) – Steve
以及它並不完全很慢。但是,看起來似乎過分矯枉過正,後面還會創建很多其他的PHP函數,所以我試圖儘可能提高每個函數的效率。 –
我不知道如何改進當前的實現,但是怎麼樣:使用平均評分來創建CSS類,比如'fa-star-3'(3.0)和'fa-star-4_5'(4.5),然後改變提供評分的方式。 ;) –