基本上我正在努力做一个简单的5星评级系统,使用星形的真棒课程。
全明星
return a.Equals(b) ? b : Math.Min(a, b);
没有明星
complex(x,y) == polar(r,th)
半星
void PushAway( std::vector< std::complex< double > > & player_coords )
{
const double r_o = 3.0; // obstacle radius
const double r_p = 1.0; // player radius
const double r_t = 0.1; // 'close'
const double push = 10.0; // pushing amount
for( uint idx = 0; idx < player_coords.size(); ++idx )
{
std::complex< double > & pc = player_coords[idx];
double magn = std::abs( pc );
// too close ?
if( magn < r_o + r_t + r_p )
{
// push away in appropriate direction
pc = std::polar( push + magn, std::arg( pc ) );
}
}
}
所以我循环浏览我的服务的每个评论,如下所示:
<i class="fa fa-star"></i>
从此我现在已将评论数量和所有评论评分的总和加在一起。
我将这两个值传递给我的函数,如下所示:
<i class="fa fa-star-0"></i>
所以我所做的这个功能确实可以解决这个问题并确切地按照我的需要工作,但是它必须为页面上的每个服务重复这个过程。所以,当我循环遍历所有服务时,我会遍历每个评论并执行此操作,这似乎有点过分了。
这个功能理论上可以被调用20次,因为我可以在一个页面上显示多达20个服务。
有谁知道我如何才能提高效率?
答案 0 :(得分:2)
我写了这个函数(来自你的)。虽然如果它有效,那么你的应该没问题。
我不知道我的是否比你的更快,所以它只是一个替代方案。 (另外我认为我的阅读更容易,但这只是偏好)
function get_rating_stars($reviewRating,$i){
// Calculate Rating
$rating = max(0, min(5, round($reviewRating/$i * 2) / 2));
$halfStar = (int)$rating != $rating;
$arrayResult = array_fill(0, $rating, '<li class="active"><i class="fa fa-star"></i></li>'); // Full Stars
if($halfStar){
$arrayResult[] = '<li class="active"><i class="fa fa-star-half-o"></i></li>'; // One half Star
}
$arrayResult = array_pad($arrayResult, 5, '<li><i class="fa fa-star-o"></i></li>'); // Empty Start
return implode('', $arrayResult);
}