递归 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);
您可以通过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;
我正在尝试在 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);
您可以通过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;