Я написал рекурсивную функцию в PHP для обрезки текста. Обрезанный текст будет ... прикреплен к концу. Необработанный текст будет возвращен в исходном состоянии.Возвращаемое значение рекурсивной функции PHP
Он работает, если текст соответствует максимальной ширине. Однако, если он не соответствует заданной ширине, функция не вернет значение, но должно. Кажется, что весь оператор возврата игнорируется. Если я заменил возврат эхом, он отобразит правильное значение.
Ожидаемый результат:
-TEST ZIN
-TEST ZI
-TEST Z
-TEST
-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);
ПРИМЕЧАНИЕ: эхо в функции предназначено для отладки.
Заранее спасибо.
Вы должны указать, что константа «SIZE» равна. Это упростит работу, поэтому мы находимся в одном и том же месте. – Tim
Функция обрезки текста? Не могли бы вы объяснить немного больше, что вы пытаетесь выполнить с помощью этой функции? – tcables
Вы правы. Извини за это. SIZE = 9 и FONTURL = '/usr/share/fonts/dejavu/DejaVuSans.ttf' –