2009-03-27 32 views
5

Me encontré necesitando esta función, y me preguntaba si ya existe en PHP.¿Esta función existe en PHP?

/** 
* Truncates $str and returns it with $ending on the end, if $str is longer 
* than $limit characters 
* 
* @param string $str 
* @param int $length 
* @param string $ending 
* @return string 
*/ 
function truncate_string($str, $length, $ending = "...") 
{ 
    if (strlen($str) <= $length) 
    { 
     return $str; 
    } 
    return substr($str, 0, $length - strlen($ending)).$ending; 
} 

lo tanto, si el límite es de 40 y la cadena es "El zorro rápida saltó sobre el perro marrón perezoso", la salida sería "El zorro rápida saltaron sobre la frente perezoso ...". Parece el tipo de cosa que existiría en PHP, así que me sorprendió cuando no pude encontrarlo.

Respuesta

2

No, no existe. Sin embargo, muchas bibliotecas lo ofrecen porque no eres el primero en necesitarlo. p.ej. Smarty

1

No es así.

5
$suffix = '...'; 
$maxLength = 40; 

if(strlen($str) > $maxLength){ 
    $str = substr_replace($str, $suffix, $maxLength); 
} 

Su implementación puede variar ligeramente dependiendo de si la longitud del sufijo debe contar para la longitud total de la cadena.

+0

Eso no es bueno, ya que añade el sufijo a una cadena más corta de $ maxLength. –

+0

Cierto, todavía tendría que envolverlo en su propia función, que solo ejecuta substr_replace() basado en esa condición. –

4

Aquí está la versión de una sola línea para los interesados ​​

<?php 
    echo (strlen($string) > 40 ? substr($string, 0, 37)."..." : $string); 
?> 
+0

Esa fue mi primera respuesta, también. Sin embargo, reste la longitud de su sufijo de la longitud de su cadena, de lo contrario obtendrá un resultado de 43 caracteres –

+0

Buen trabajo, pero es mejor utilizar un código fácil de leer que un código ternario, a menos que sea una situación de velocidad extrema en la que esté bucle esto un millón de veces. – TravisO

+0

Por supuesto, estoy de acuerdo. De ahí mi redacción para los interesados. –

Cuestiones relacionadas