PHP递归函数返回值

Posted

技术标签:

【中文标题】PHP递归函数返回值【英文标题】:PHP recursive function return value 【发布时间】: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' 【参考方案1】:

您没有正确返回文本,例如

     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;

【讨论】:

谢谢。这工作正常。我从来没有做过“真实世界”的递归函数,所以这对我来说是全新的。您建议的第一个解决方案就像一个魅力。【参考方案2】:

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

return check_length(substr($str, 0, -1), $max, $size, true);

【讨论】:

以上是关于PHP递归函数返回值的主要内容,如果未能解决你的问题,请参考以下文章

用PHP调用API返回JSON值,怎么把JSON返回值调用到html呢?

递归函数不返回指定值

python第三篇 python基础之函数,递归,内置函数

递归 JavaScript 函数正在丢失返回值

递归幂函数:如果没有初始返回值,为啥会这样?

python 复习 4-1 函数参数返回值递归