使用PHP打印评论星并使其动态化

使用PHP打印评论星并使其动态化,php,html,Php,Html,我正在尝试用PHP自动化HTML代码。我的任务是打印评论星——亚马逊和许多其他网站上用于计算平均评分的星星。 我试图实现的是这种模式 名称:评级:描述: 为了实现这一点,我使用foreach循环来打印数组中的值。我对名称和描述没有任何问题,但根据使用foreach从数组中获得的计数,我面临打印评论星的问题 我有这个HTML代码,它打印星星 <ul class="review-rating star-rating"> <li><span class="fa fa-1x

我正在尝试用PHP自动化HTML代码。我的任务是打印评论星——亚马逊和许多其他网站上用于计算平均评分的星星。 我试图实现的是这种模式

名称:
评级:
描述:

为了实现这一点,我使用foreach循环来打印数组中的值。我对名称和描述没有任何问题,但根据使用foreach从数组中获得的计数,我面临打印评论星的问题
我有这个HTML代码,它打印星星

<ul class="review-rating star-rating">
<li><span class="fa fa-1x fa-star"></span></li>
</ul>
上面的HTML将打印一颗星

    <ul class="review-rating star-rating">
    <li><span class="fa fa-1x fa-star"></span></li>
    <li><span class="fa fa-1x fa-star"></span></li>
    <li><span class="fa fa-1x fa-star-half-empty"></span></li>
    <li><span class="fa fa-1x fa-star-o"></span></li>
    <li><span class="fa fa-1x fa-star-o"></span></li>
    </ul>
上面的HTML将打印2.5颗星

现在,我希望根据从PHP获得的计数值自动生成这个HTML。假设对于一个特定的数组,我得到的计数是3。因此,不必用5行代码编写这个HTML代码,如何在PHP中实现自动化呢。 我认为有一种方法是使用9个if语句:5表示满星,4表示半星(1.5,2.5,3.5,4.5)。但这又是一项乏味的任务

另一个选择是在JQuery中实现自动化,这也是一个问题,因为前端开发人员不会这样做

所以,我试图用上面给我的设计来寻找解决方案

我能得到一些建议吗?

你可以用这个:

<?php
/* Function helper to round numbers on .5 step, as 1, 1.5, 2, 2.5... */
function round_half($num) {
    return round($num * 2) / 2;
};
function print_stars($num) {
    echo '<ul class="review-rating star-rating">';
    for ($n=1; $n<=5; $n++) {
        echo '<li><span class="fa fa-1x fa-star';
        if ($num==$n+.5) {
            echo '-half-empty';
        } elseif ($num<$n+.5) {
            echo '-o';
        };
        echo '"></span></li>';
    };
    echo '</ul>';
};
$rating = round_half( 3.452 );
print_stars($rating);
?>

对于jQuery,它将如下所示:

$.fn.print_stars=函数(){ 返回此值。每个(函数(){ var thisList=$(此); var thisRating=thisList.data('stars'); thisList.find('li span')。每个函数(m){ var n=m+1; var thisClass='fa-1x fa星形'; 如果(该额定值==n+.5){ thisClass+='-半空'; }否则,如果(thisRating您可以使用:

<?php
/* Function helper to round numbers on .5 step, as 1, 1.5, 2, 2.5... */
function round_half($num) {
    return round($num * 2) / 2;
};
function print_stars($num) {
    echo '<ul class="review-rating star-rating">';
    for ($n=1; $n<=5; $n++) {
        echo '<li><span class="fa fa-1x fa-star';
        if ($num==$n+.5) {
            echo '-half-empty';
        } elseif ($num<$n+.5) {
            echo '-o';
        };
        echo '"></span></li>';
    };
    echo '</ul>';
};
$rating = round_half( 3.452 );
print_stars($rating);
?>

对于jQuery,它将如下所示:

$.fn.print_stars=函数(){ 返回此值。每个(函数(){ var thisList=$(此); var thisRating=thisList.data('stars'); thisList.find('li span')。每个函数(m){ var n=m+1; var thisClass='fa-1x fa星形'; 如果(该额定值==n+.5){ thisClass+='-半空';
}else if(thisRating这里是我在PHP端渲染星星的函数

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;
}
函数renderStarRating($rating,$maxrrating=5){
$fullStar=“
  • ”; $halfStar=“
  • ”; $emptyStar=“
  • ”;
    $rating=$rating这是我在PHP端渲染星星的函数

    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;
    }
    
    函数renderStarRating($rating,$maxrrating=5){
    $fullStar=“
  • ”; $halfStar=“
  • ”; $emptyStar=“
  • ”; $rating=$rating
    
    
    
    
    星星计数是作为整数?浮点数?星星计数是作为整数?浮点数?