Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/04/2005, 14:01
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 23 años
Puntos: 41
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