递归 PHP 星级评分功能无效

Recursive PHP Star-Rating function not working

我正在尝试在 PHP 中编写一个星级评分函数到 return 结果(不仅仅是回显)。

我的新版本是:

function getRating($rating, $ret = '') {
    if ($rating == 0) { return $ret; }
    if ($rating < 1) {
        $ret .= '<span class="fa fa-star-half-empty"></span>';
        $rating-= 0.5;
    } else {
        $ret .= '<span class="fa fa-star"></span>';
        $rating-= 1;
    }
    getRating($rating, $ret);
}
$var = getRating(5.0);

此 return 为空。旧版本只是回应它,但我希望它把评级保存在一个变量中:

function getRating($rating,) {
    if ($rating == 0) { return; }
    if ($rating < 1) {
        echo '<span class="fa fa-star-half-empty"></span>';
        $rating-= 0.5;
    } else {
        echo '<span class="fa fa-star"></span>';
        $rating-= 1;
    }
    getRating($rating);
}
getRating(5.0);

这一张显示了 <span> 和星星。我在第一个功能中做错了什么?提前致谢。

您的函数中需要有一个 return 值,并且您应该主要从外部调用它。这是一个工作示例: https://3v4l.org/t2G7F

代码:

function getRating($rating, $ret = '') {
    if ($rating == 0) { return $ret; }
    if ($rating < 1) {
        $ret .= '<span class="fa fa-star-half-empty"></span>';
        $rating-= 0.5;
    } else {
        $ret .= '<span class="fa fa-star"></span>';
        $rating-= 1;
    }
    return getRating($rating, $ret);
}

echo getRating(5.0);

您可以尝试使用 pass by reference

 function recGerRating(&$rating, &$html=null){
    if($rating == 0 ) return $html;
    if($rating < 1){
      $html .='<span class="fa fa-star-half-empty"></span>';
      $rating-= 0.5;
      return $html;
    }else{
      $html .= '<span class="fa fa-star"></span>';
      $rating-= 1;
      return recGerRating($rating, $html);
    }
  }
 $r = 5;
 echo recGerRating($r);

实例:https://3v4l.org/k8RXt

您可以通过link传递变量。始终从函数返回响应比通过 link 传递变量并更改它更昂贵的操作。这种方法使用较少的内存。

function getRating($rating, &$ret) {
    if ($rating == 0) { return; }
    if ($rating < 1) {
        $ret .= '<span class="fa fa-star-half-empty"></span>';
        $rating-= 0.5;
    } else {
        $ret .= '<span class="fa fa-star"></span>';
        $rating-= 1;
    }
    getRating($rating, $ret);
}

$var = "";
getRating(4.5, $var);
echo $var;