He escrito una función recursiva en PHP para recortar texto. El texto recortado tendrá ... adjunto al final. El texto no recortado se devolverá en su estado original.Función recursiva PHP valor devuelto
Funciona si el texto se ajusta al ancho máximo. Sin embargo, si no cabe en el ancho dado, la función no devolverá un valor, pero debería. Parece que se ignora toda la declaración de devolución. Si reemplazo el retorno con eco, muestra el valor correcto.
El resultado esperado:
-TEST ZIN
-TEST ZI
-TEST Z
-TEST
-TES
-TE ... (no se devuelve nada aquí, así que esto nunca se mostrará)
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);
NOTA: los ecos en la función son para la depuración.
Gracias de antemano.
Deberías poner lo la constante 'SIZE' es igual a. Hará que correr esto sea un poco más fácil, así que estamos en el mismo estadio. – Tim
¿Una función para recortar texto? ¿Podría explicar un poco más lo que está tratando de lograr con esta función? – tcables
Tienes razón. Lo siento por eso. SIZE = 9 y FONTURL = '/usr/share/fonts/dejavu/DejaVuSans.ttf' –