Yo también hice una función utilizando wordwrap(). Y ya sin darme cuenta la vengo utilizando desde hace bastante tiempo.
Código PHP:
function limitar_texto($texto, $max_long){
$texto = wordwrap($texto, $max_long, '<|*|*|>'); // separar en $max_long con ruptura sin cortar palabras.
$posicion = strpos($texto, '<|*|*|>'); // encontrar la primera aparición de la ruptura.
$texto = substr($texto, 0, $posicion).'...'; // tomar la porción antes de la ruptura y agregar '...'
return $texto;
}
Pero como verán... lo que hace es utilizar el wordwrap e ir añadiendo una ruptura <|*|*|> cada $max_long sin cortar palabras.
Lo que sigue es más sencillo. Me parece que la función de Cluster irá más rápido porque trabaja directamente sólo con una pequeña porción del texto.
O sea, en textos pequeños no habrá diferencia... pero para textos muy largos...
De todos modos en la función de Cluster yo utilizaría array_pop() para deshacernos directamente del último elemento. O sea, la función de Cluster podría quedar mejor así:
Código PHP:
function cortar_frase($frase_entrada, $cortar){
$frase_corta = substr($frase_entrada, 0, $cortar); // obtener la frase cortada.
$palabras = explode(' ', $frase_corta); // obtener array con las palabras.
array_pop($palabras); // le quitamos la ultima palabra.
$frase_salida = implode(' ',$palabras); // y concatenamos con el espacio hacia una cadena.
$frase_salida .= "..."; // se añaden los puntos suspensivos a la cadena obtenida..
return $frase_salida;
}
¿cometarios?
Saludos