0

私が持っている:fullstar.png、halfstar.png、greystar.png

<?php
$average_stars = round(4);
for($i=0; $i<$average_stars; $i++)
{
    ?>
    <img src="<?php echo url::site('images/desktop/fullstar.png'); ?>" />
    <?php
}
for($i=5; $i>$average_stars; $i--)
{
    ?>
    <img src="<?php echo url::site('images/desktop/greystar.png'); ?>" />
    <?php
}
?>

これにより、$average_stars が 4 のとき、4 つのフルスターと 1 つのグレースターが得られます。

完全に正常に動作します。

これで、半分の星を表示して動作させたいと思います。

したがって、4.5 の場合、最後の星はハーフスターにする必要があります。

これどうやってするの?私は最初にそれを機能させる必要があると思うので、 round() は最も近い整数または最も近い整数に切り上げます.5

4

6 に答える 6

1

星 0 ~ 5 のランク付けで星半分を使用することは、満点の星 10 個を使用することと同じことです。

10 個の星のランキングが機能するようになったら、ポイントはインデックスに応じて異なる画像を使用することです。各偶数インデックスは星の左側の部分であり、右側は星の右側の部分である必要があります。

于 2013-09-29T16:58:39.980 に答える
0

楽しみのために...

ライブを見る: http://sandbox.onlinephpfunctions.com/code/84c3a6d9de3170227841d6fd3dce0c2a0b10dd9e

<?php

    $stars_for_fun = function($avg, $max) {
      $avg = round($avg, 2);
      $starly = str_repeat('FULL ', floor($avg)).str_repeat('HALF ', round( ($avg-floor($avg)), 0, PHP_ROUND_HALF_UP)).str_repeat('GREY ', round(($max-$avg)-0.01, 0, PHP_ROUND_HALF_UP) );
      print $avg.': '.$starly.'<br>';

    };

    //$cfg_min_stars = 1;
    $cfg_max_stars = 5;

    $stars_for_fun(3.76, $cfg_max_stars);
    $stars_for_fun(3.5, $cfg_max_stars);
    $stars_for_fun(2.51, $cfg_max_stars);
    $stars_for_fun(2.49, $cfg_max_stars);
    $stars_for_fun(2.01, $cfg_max_stars);
    $stars_for_fun(1.99, $cfg_max_stars);
    $stars_for_fun(0.99, $cfg_max_stars);
    $stars_for_fun(0.51, $cfg_max_stars);
    $stars_for_fun(0.50, $cfg_max_stars);
    $stars_for_fun(0.49, $cfg_max_stars);
    $stars_for_fun(0.01, $cfg_max_stars);

?>
于 2013-09-29T18:30:23.390 に答える
0

htmlに出力するとします。

星の数が最大の 2 つの画像を作成できます (1 つは完全な星、もう 1 つは灰色の星)。親 DIV の背景に灰色の星を配置します。次に、最初の div 内に別の div を追加します。今回は背景に満天の星の画像を設定し、その幅を最初のもののパーセンテージに設定します。このdivにoverflow:hiddenを設定することを忘れないでください。

そのコードはチェックしていませんが、次のようになります。

<div style="background-image:url(grey-5-stars.png); width: 50px;">
<div style="background-image:url(full-5-stars.png); width: <?= (50 * $stars / $maxStars) ?>px; ">
&nbsp;
</div>
</div>

これで、常にすべての灰色の星を表示し、それらに完全な星の割合を重ねることができます。このように、半星だけに縛られることはありません。

于 2013-09-29T17:07:24.090 に答える
0

ものすごく単純:

<?php
$stars=4.7449;
$average_stars = round($stars*2)/2;
for($i=0; $i<floor($average_stars); $i++)
{
    ?>
    <img src="<?php echo url::site('images/desktop/fullstar.png'); ?>" />
    <?php
}
if(floor($average_stars)!=$average_stars)
{?>
   <img src="<?php echo url::site('images/desktop/halfstar.png'); ?>" />
<?php
}

for($i=5; $i>ceil($average_stars); $i--)
{
    ?>
    <img src="<?php echo url::site('images/desktop/greystar.png'); ?>" />
    <?php
}
于 2013-09-29T17:08:40.833 に答える