【发布时间】:2012-03-11 22:23:41
【问题描述】:
我在 PHP 中编写了一个递归函数来裁剪文本。裁剪后的文本将带有 ... 附加到末尾。未裁剪的文本将以其原始状态返回。
如果文本适合最大宽度,它会起作用。但是,如果它不适合给定的宽度,则函数将不会返回值,但应该返回。似乎整个 return 语句都被忽略了。如果我用 echo 替换 return,它会显示正确的值。
预期结果:
-TEST ZIN
-TEST 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 用于调试。
提前谢谢你。
【问题讨论】:
-
你应该输入常数 'SIZE' 的值。它会让运行起来更容易一些,所以我们在同一个球场。
-
裁剪文本的功能?你能解释一下你想用这个函数完成什么吗?
-
你是对的。对于那个很抱歉。 SIZE = 9 和 FONTURL = '/usr/share/fonts/dejavu/DejaVuSans.ttf'
标签: php recursion return php-gd