2

次の PHP コードを作成するための最良かつ最も効率的な方法は何でしょうか?

    if ($av == 1) echo '/images/1-star.png';
    if ($av > 1 && < 2) echo '/images/1-half-star.png';
    if ($av == 2) echo '/images/2-star.png';
    if ($av > 2 && < 3) echo '/images/2-half-star.png';

これと同じパターンで 5 つ星まで。

4

7 に答える 7

6

次のように使用してください:

$n = is_int($av) ? $av : floor($av) + 0.5;
echo '/images/'.$n.'-star.png';

ここに画像の説明を入力

画像を1行ごとに切り取り、「1-star.png」「1.5-star.png」「2-star.png」「2.5-star.png」「3-start.png」「3.5- star.png」など...

于 2012-05-12T10:07:01.737 に答える
6

これは、最も効率的な方法ではない可能性があります。しかし、私はそれがきれいなコードだと思います。これをチェックして。

function renderStarRating($rating,$maxRating=5) {
    $fullStar = "<li><i class = 'fa fa-star'></i></li>";
    $halfStar = "<li><i class = 'fa fa-star-half-full'></i></li>";
    $emptyStar = "<li><i class = 'fa fa-star-o'></i></li>";
    $rating = $rating <= $maxRating?$rating:$maxRating;

    $fullStarCount = (int)$rating;
    $halfStarCount = ceil($rating)-$fullStarCount;
    $emptyStarCount = $maxRating -$fullStarCount-$halfStarCount;

    $html = str_repeat($fullStar,$fullStarCount);
    $html .= str_repeat($halfStar,$halfStarCount);
    $html .= str_repeat($emptyStar,$emptyStarCount);
    $html = '<ul>'.$html.'</ul>';
    return $html;
}
于 2016-11-12T08:08:26.403 に答える
2

スイッチケースが一番クリアでカスタマイズしやすいと思います

switch (true) {
  case  $av == 1 : 
  echo '/images/1-star.png';
  break;

  case  $av > 1 && $av < 2  : 
  echo '/images/1-half-star.png';
  break;

  case  $av == 2 : 
  echo '/images/2-star.png';
  break;

  case  $av > 2 && $av < 3  : 
  echo '/images/2-half-star.png';
  break;

  /***handle any other cases ****/ 
  default:
  echo '/images/0-star.png';
  break;
}

ありがとう Dcoder 、彼は私に良いアイデアを教えてくれました

于 2012-05-12T10:09:23.817 に答える
1

4つの画像、フルスター、ハーフ、クォーター、および3/4のみがあります。

完全な星を何回もabs($av)印刷してから、の切り上げ/切り下げの値に応じて別の星を印刷します$av - floor($av)

これは私がウェブサイトに対して行った方法ですが、彼らは半分を印刷するだけでなく、4分の3と4分の1の星も望んでいました。しかし、論理は同じです。

オンラインのwritecodeでこのコードをテストしました:

 $av = 3.5;

for ($i = 1; $i <= floor($av); $i++) {
    echo "<img src=http://www.leedshospitalalert.org.uk/images/star_shape.gif>";
}

$av2 = $av - floor($av);

if ($av2 > 0.2 && $av2 < 0.8) {
    echo "<img src=http://icdn.pro/images/en/h/a/half-star-icone-6015-48.png>";
} 
elseif ($av2 > 0.7) 
{
    echo "<img src=http://www.leedshospitalalert.org.uk/images/star_shape.gif>";
}
于 2012-05-12T10:39:02.753 に答える
0

次の数量を計算できます。

$i = 2 * floor($av - 1) + (floor($av) == $av ? 0 : 1);

これにより、値の数値、、、...が生成され0ます。これを使用して、ファイル名の配列にインデックスを付けることができます。12

于 2012-05-12T10:08:52.857 に答える
-1

if の使用

if ($av==1){
    echo '/images/1-star.png';
} elseif($av > 1 && < 2){
    echo '/images/1-half-star.png';
} elseif ($av==2){
    echo '.....';
}                    // so far so forth

テストしたばかりです。これを切り替えると、望ましくない結果が生じる可能性があります。

于 2012-05-12T10:10:52.980 に答える