truncar cadena, pero eliminar la mitad de la cadena en lugar de final
Se me ocurrió esta función que trunca una cadena dada al número de palabras dado o al número de caracteres que sea más corto. Luego, después de cortar todo después del límite de número de caracteres o palabras, agrega un '...' a la cadena.
¿Cómo puedo eliminar caracteres / palabras de la mitad de la cadena y reemplazarlos con '...' en lugar de reemplazar caracteres / palabras al final con '...'?
Aquí está mi código:
function truncate($input, $maxWords, $maxChars){
$words = preg_split('/\s+/', $input);
$words = array_slice($words, 0, $maxWords);
$words = array_reverse($words);
$chars = 0;
$truncated = array();
while(count($words) > 0)
{
$fragment = trim(array_pop($words));
$chars += strlen($fragment);
if($chars > $maxChars){
if(!$truncated){
$truncated[]=substr($fragment, 0, $maxChars - $chars);
}
break;
}
$truncated[] = $fragment;
}
$result = implode($truncated, ' ');
return $result . ($input == $result ? '' : '...');
}
Por ejemplo sitruncate('the quick brown fox jumps over the lazy dog', 8, 16);
se llama, 16 caracteres es más corto, de modo que es el truncamiento que sucederá. Por lo tanto, se eliminará 'fox salta sobre el perro perezoso' y se añadirá '...'.
Pero, en cambio, ¿cómo puedo tener la mitad del límite de caracteres desde el principio de la cadena y la mitad desde el final de la cadena y lo que se elimina en el medio reemplazado por '...'? Entonces, la cadena que estoy buscando que se devuelva en este caso, uno, sería: "el quic ... perezoso perro".