PHP递归函数返回值

PHP递归函数返回值,php,recursion,return,php-gd,Php,Recursion,Return,Php Gd,我用PHP编写了一个递归函数来裁剪文本。剪切的文本将具有。。。附在末端。未剪切的文本将以其原始状态返回 如果文本符合最大宽度,则该选项有效。但是,如果它不适合给定的宽度,函数将不会返回值,但应该返回。似乎整个return语句都被忽略了。如果我将返回值替换为echo,它将显示正确的值 预期结果: -测试ZIN -测试ZI -测试Z -测试 -TES -特。。。(此处未返回任何内容,因此不会显示此内容) 函数检查长度($str,$max,$size=size,$rec=false){ echo“FU

我用PHP编写了一个递归函数来裁剪文本。剪切的文本将具有。。。附在末端。未剪切的文本将以其原始状态返回

如果文本符合最大宽度,则该选项有效。但是,如果它不适合给定的宽度,函数将不会返回值,但应该返回。似乎整个return语句都被忽略了。如果我将返回值替换为echo,它将显示正确的值

预期结果:
-测试ZIN
-测试ZI
-测试Z
-测试
-TES
-特。。。(此处未返回任何内容,因此不会显示此内容)

函数检查长度($str,$max,$size=size,$rec=false){
echo“FUNCTION$str”;
list($left,$right)=imageftbbox($size,0,FONTURL,$str);
如果($rec==false){
如果(($right-$left)>$max){
回显“如果1
”; 检查长度(substr($str,0,-1),$max,$size,true); }否则{ 回声“else 1
”; 返回$str; } }否则{ 如果(($right-$left)>($max-9)){ 回显“如果2
”; 检查长度(substr($str,0,-1),$max,$size,true); }否则{ 回声“else 2
”; 返回“$str…”; } } } 回波检查长度(“测试ZIN”,30);
注意:函数中的echo用于调试


提前谢谢。

您没有正确返回文本

    } else {
        echo 'else 1<br />';
        return $str;   <---nothing in the 'parent' caller catches this, so it's lost
    }


返回递归函数调用的结果;)


您应该输入常量“大小”等于多少。这将使运行这个更容易,所以我们在同一个球场。一个功能来裁剪文本?你能再解释一下你想用这个函数实现什么吗?你是对的。很抱歉。SIZE=9和FONTURL='/usr/share/fonts/dejavu/DejaVuSans.ttf'谢谢。这个很好用。我从来没有做过“真实世界”的递归函数,所以这对我来说是全新的。你建议的第一个解决方案很有魅力。
    } 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);