PHP рекурсивная функция, возвращаемое значение - PullRequest
9 голосов
/ 21 февраля 2012

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

Работает, если текст соответствует максимальной ширине.Однако, если он не помещается в заданную ширину, функция не будет возвращать значение, но оно должно.Кажется, что весь оператор 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);

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

Заранее спасибо.

Ответы [ 2 ]

19 голосов
/ 21 февраля 2012

Вы не возвращаете текст должным образом, например,

    } 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;
4 голосов
/ 21 февраля 2012

Вернуть результат вашего рекурсивного вызова функции;)

return check_length(substr($str, 0, -1), $max, $size, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...