我用PHP编写了一个递归函数来裁剪文本。裁剪后的文本将具有。。。附在末端。未裁剪的文本将以其原始状态返回。
如果文本符合最大宽度,它就会起作用。但是,如果它不适合给定的宽度,函数将不会返回值,但应该返回。似乎忽略了整个return语句。如果我将return替换为echo,它将显示正确的值。
预期结果:
-测试ZIN
-测试ZI
-测试Z
-测试
-TES
-TE。。。(此处没有返回任何内容,因此永远不会显示)
function check_length($str, $max, $size = SIZE, $rec = false) {
echo "FUNCTION $str ";
list($left, , $right) = imageftbbox($size, 0, FONTURL, $str);
if($rec == false) {
if(($right - $left) > $max) {
echo 'if 1<br />';
check_length(substr($str, 0, -1), $max, $size, true);
} else {
echo 'else 1<br />';
return $str;
}
} else {
if(($right - $left) > ($max - 9)) {
echo 'if 2<br />';
check_length(substr($str, 0, -1), $max, $size, true);
} else {
echo 'else 2<br />';
return "$str...";
}
}
}
echo check_length('TEST ZIN', 30);
注意:函数中的echo用于调试。
您没有正确返回文本,例如
} else {
echo 'else 1<br />';
return $str; // <--- nothing in the 'parent' caller catches this, so it's lost
}
在任何执行递归并需要返回值的地方,都必须捕获/返回递归调用本身:
return check_length(substr($str, 0, -1), $max, $size, true);
或
$newstr = check_length(...);
return $newstr;
返回递归函数调用的结果;)
return check_length(substr($str, 0, -1), $max, $size, true);