2017-10-09 54 views
6

我有以下PHP代碼本PHP代碼生成5個li標籤你能解釋如何遷移/生成一個HTML代碼到另一個HTML代碼 - PHP?

<?php 
function calculate_stars($max, $rating){ 
    $full_stars=floor($rating); 
    $half_stars = ceil($rating-$full_stars); 
    $gray_stars = $max-($full_stars + $half_stars); 
    return array ($full_stars, $half_stars, $gray_stars); 
} 

function display_star($rating){ 
    $output=""; 
    $number_stars = calculate_stars(5,$rating); 
    $full = $number_stars[0]; 
    $half = $number_stars[1]; 
    $gray = $number_stars[2]; 
    $output ='<ul class="star-rating">'; 
    if($gray) 
     for ($i=0;$i<$gray;$i++) 
     { 
      $output .= '<li class="star-icon">&#9734;</li>'; 
     } 

    if($half){ 
     $output .= '<li class="star-icon half">&#9734;</li>'; 
    } 

    if($full){ 
     for($i=0; $i<$full;$i++) 
     { 
      $output .= '<li class="star-icon full">&#9734;</li>'; 
     } 
    } 

    $output .='</ul>'; 
    return $output; 

} 

echo display_star(0.3); 

exit; 
?> 

結果:

<ul class="star-rating"> 
    <li class="star-icon">&#9734;</li> 
    <li class="star-icon">&#9734;</li> 
    <li class="star-icon">&#9734;</li> 
    <li class="star-icon">&#9734;</li> 
    <li class="star-icon half">&#9734;</li> 
</ul> 

說明關於$half$full

可變$half加載類class="star-icon half"結果:

enter image description here

變量$full添加類class="star-icon full"結果:

enter image description here

半星等同於:0.51.52.53.54.5

全明星等同於:12345

而這一切都是通過以下方式控制:

echo display_star(0.5); 

您可以在PHP代碼和生成的HTML代碼,做測試here可以粘貼here看到的結果。


現在我的問題

怎樣才能按下列順序根據PHP display_star(4.5);的價值尊重他們的數據和類10個li標籤?

在新的代碼來生成必須在所有liclass="c-rating__item"和類left交換一個(或傳遞li)和順序data-index,因爲它是用這種方式必須由生成我的HTML代碼這個值的手段是php display_star(0.5);

<ul class="c-rating"> 
    <li class="c-rating__item is-active left" data-index="0"></li> 
    <li class="c-rating__item" data-index="1"></li> 
    <li class="c-rating__item left" data-index="2"></li> 
    <li class="c-rating__item" data-index="3"></li> 
    <li class="c-rating__item left" data-index="4"></li> 
    <li class="c-rating__item" data-index="5"></li> 
    <li class="c-rating__item left" data-index="6"></li> 
    <li class="c-rating__item" data-index="7"></li> 
    <li class="c-rating__item left" data-index="8"></li> 
    <li class="c-rating__item" data-index="9"></li> 
</ul> 

中間的恆星是等同於下面的數據索引02468

而且is-active類是明星的所有的星星或半填充的全球經理。

實際例子,如果我們產生一個等級的HTML代碼display_star(3.5);結果應該是以下幾點:

<ul class="c-rating"> 
    <li class="c-rating__item is-active left" data-index="0"></li> 
    <li class="c-rating__item is-active" data-index="1"></li> 
    <li class="c-rating__item is-active left" data-index="2"></li> 
    <li class="c-rating__item is-active" data-index="3"></li> 
    <li class="c-rating__item is-active left" data-index="4"></li> 
    <li class="c-rating__item is-active" data-index="5"></li> 
    <li class="c-rating__item is-active left" data-index="6"></li> 
    <li class="c-rating__item" data-index="7"></li> 
    <li class="c-rating__item left" data-index="8"></li> 
    <li class="c-rating__item" data-index="9"></li> 
</ul> 

注: CSS樣式類here show two examples full stars and middle star來獲得更徹底地瞭解。

+0

你能解釋一下什麼是$一半,$滿了嗎? – Krish

+3

@AmLy通過值的方式通過php添加類的風格,有趣的是認爲這隻能使用jquery – May

+0

@AmLy更新我的答案...希望它能幫助你 – Krish

回答

2

UPDATE:

function calculate_stars($rating){ 
    // step starting from 0 
    return (($rating/0.5)-1); 
} 

function display_star($rating){ 
    $output=""; 
    $step = calculate_stars($rating); 
    $output ='<ul class="c-rating">'; 
    for ($i=0;$i<10;$i++) 
    { 
     $class = ''; 
     if($i<=$step) $class = ' is-active'; 
     if($i%2 == 0) $class .= ' left'; 
     $output .= '<li class="c-rating__item'. $class.'" data-index="'.$i.'"></li>'; 
    } 

    $output .='</ul>'; 
    return $output; 

} 

echo display_star(3.5); 

exit; 

說明:從0各步驟考慮10開始的步驟的規模是0.5

按照您的問題

  • 如果評級是1 li 's指數0和1應具有is-active類 - 裝置,直至步驟規模= 1個分配is-active
  • 如果評級是1.5 li' s指數0,1和2應該有is-active級別 - 表示最多可以分級= 2分配is-active
  • 如果評分爲3.5 li的索引0,1,2,3,4,5,6應該有is-active級別 - 意味着up步長= 6分配is-active
+0

你已經給了代碼完美的朋友。 – AmLy

+0

我忘記了一個細節應該在最後一個班'is-active'上添加'rating'類 – AmLy

+0

[示例](https://jsfiddle.net/mhu72ax7/) – AmLy

-1

嘗試改變:

$number_stars = calculate_stars(5,$rating); 

到:

$number_stars = calculate_stars(10,$rating); 
+0

怎麼樣'c-rating__item'和「左」班?那麼'data-index'屬性呢? –

0
function display_star($rating){ 
    $output=""; 
    $max = 10; 

    if($rating > 5){return;} 

    $num = $rating *2; 
    $num_half = ceil($rating) * 2; 
    echo $num_half . '<br>'; 

    $output ='<ul class="c-rating">'; 

     for($i=0;$i<$num;$i++){ 
      $class = ($i % 2 == 0) ? "is-active left" : "is-active"; 
      $output .= '<li class="c-rating__item ' . $class . '" data-index=' . $i . ' >c-rating__item ' . $class . '</li>'; 
     } 

     $class = ($class != "is-active left") ? "left" : ""; 

     for($i=$num;$i<$max;$i++){ 
      $output .= '<li class="c-rating__item ' . $class . '" data-index=' . $i . ' >c-rating__item ' . $class . '</li>'; 
      $class = ($class != "left") ? "left" : ""; 
     } 

    $output .='</ul>'; 

    return $output; 

} 


echo display_star(2.5);