0

星と半星の形で 1 から 5 (.5 値を含む) までのユーザー評価の視覚的表現を作成しようとしています。既に MySQL データベースからユーザー評価の配列を作成しました。これらの値を平均して、数値の形式で平均ユーザー評価を作成しました。私がやりたいことは、この値を取ることです..

$averageuserrating

その値が「1」の場合は、このコードを 1 回返します。

 echo '<img src="images/star.png" class="ratingstar" />';

$averageuserrating が 1.5 の場合、このコードが返されます

<img src="images/star.png" class="ratingstar" /><img src="images/halfstar.png" class="ratingstar" />

など... 10 個のネストされた if ステートメントなしでこれを行う方法はありますか?

4

7 に答える 7

3

次のような方法で実行できます。

$fullStar = '<img src="images/star.png" class="ratingstar" />';
$halfStar = '<img src="images/halfstar.png" class="ratingstar" />';

$rating = 1.5;

while($rating > 0){
    if($rating >= 1){
        echo $fullStar;
        $rating = $rating - 1;
        continue;
    }

    if($rating >= 0.5){
        echo $halfStar;
        $rating = $rating - 0.5;
    }
}

余談ですが、これは評価システムを表示する最良の方法ではありません。

于 2012-11-24T21:30:04.423 に答える
1

str_repeat関数と少しの数学を使用するだけです。

$full_star = '<img src="images/star.png" class="ratingstar" />';
$half_star = '<img src="images/halfstar.png" class="ratingstar" />';

echo str_repeat( $full_star, floor($averageuserrating) );
if(! is_int($averageuserrating) ){
    echo $half_star;
}

うまくいくと思います。

于 2012-11-24T21:34:58.920 に答える
1
for($i = 1; $i <= floor($averageuserrating); $i++)
    echo '<img src="images/star.png" class="ratingstar" />';
if($averageuserrating > floor($averageuserrating))
    echo '<img src="images/halfstar.png" class="ratingstar" />';

注: 平均が 0.5 ずつ増加するだけでなく、たとえば 1.4 を取得できる場合: 2 番目の条件を次のように変更します。

if($averageuserrating >= (floor($averageuserrating) + 0.5))
于 2012-11-24T21:29:45.140 に答える
0

switch ステートメントを使用できます。

switch($value){
case "1";
echo '<img src="images/star1.png" class="ratingstar" />';
break; 
case "1";
echo '<img src="images/star2.png" class="ratingstar" />';
break;

so on and so forth.. 

}
于 2012-11-24T21:29:38.390 に答える
0

考えられる解決策のコードは次のとおりです。

$numWholeStars = (int)$averageuserrating;

$numHalfStars = $averageuserrating - (int)$averageuserrating;

for($i = 0; $i < $numWholeStars; $i++) {
    echo '<img src="images/star.png" class="ratingstar" />';
}

if($numHalfStars != 0) {
    echo '<img src="images/halfstar.png" class="ratingstar" />';
}
于 2012-11-24T21:39:36.943 に答える
0

基になるコードをリファクタリングして、a) すべての評価を収集する必要があるように思えます。b) 評価に表示する星の数を表示します。最初 にphp数学を参照してください-モジュラス

get_user_ratings($user="bob")
{
    15 - the user ratings should/could be in 1 place (int)users.total_ratings
    // lets say there are 15 records similar to the one below
    jim, 1, bob 
    ...
    mary, 1.5, bob

    // calculate the average of all votes
    ...
    ...
    /* If your rating system offers the chance to rate a user 1.5 stars
     use modulus to check if the rating needs half stars */
    $stars = "";
    if( $averageuserrating % 1 == 0)
    {
        for(
            i=0;
            i<$averageuserrating-1; 
           $i++;$stars .= '<img src="images/star.png" class="ratingstar" />'; 
        )
        return $stars;
    }
    else
    {
        for(
            i=0;
            i<$averageuserrating-1; 
            $i++;$stars .='<img src="images/star.png" class="ratingstar" />' 
        )
        $stars .= '<img src="images/halfstar.png" class="ratingstar" />'; 
        return $stars;
    }

}
于 2012-11-24T21:58:24.033 に答える
0
$fullstar = '<img src="images/star.png" class="ratingstar" />';
$halfstar = '<img src="images/halfstar.png" class="ratingstar" />';

$value=2.5;//some rating

$number = number_format ( $value, 1 );
$fs = floor ( $number );  //full stars
$hs=(($value*10)%10)/5;   //half stars


while($fs>0)
{
echo $fullstar;
$fs=$fs-1;
}

if($hs==1)
echo $halfstar;
于 2012-11-24T22:06:15.637 に答える