Возвращаемое значение рекурсивной функции PHP

Я написал рекурсивную функцию на PHP для обрезки текста. Обрезанный текст будет ... прикреплен к концу. Необрезанный текст будет возвращен в исходном состоянии.

Работает, если текст соответствует максимальной ширине. Однако, если оно не помещается в заданную ширину, функция не вернет значение, но должно. Кажется, что весь оператор return игнорируется. Если я заменю return на echo, он покажет правильное значение.

Ожидаемый результат:
-ТЕСТОВЫЙ ЗИН
-ТЕСТ ЗИ
-ТЕСТ 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);

ПРИМЕЧАНИЕ: эхо в функции предназначено для отладки.

Заранее благодарю.

9
задан Bas Palmer 21 February 2012 в 15:41
поделиться