Skip to content

Instantly share code, notes, and snippets.

@kuroisuna
Last active November 27, 2015 17:18
Show Gist options
  • Save kuroisuna/d0f345c2502c09d6bac3 to your computer and use it in GitHub Desktop.
Save kuroisuna/d0f345c2502c09d6bac3 to your computer and use it in GitHub Desktop.
Separa una oración en pedazos basado en un límite de letras, si existe un punto separa también
<?php
if (!function_exists('split_words')) {
/**
* Separa una oración en pedazos basado en un límite de letras,
* si existe un punto separa también
*
* Uso:
* $text = "Según The Hitchhiker's Guide to the Galaxy, un grupo de exploradores de una raza de seres pandimensionales e hiperinteligentes construyen Pensamiento Profundo, la segunda mejor computadora de todos los tiempos, para obtener la respuesta al sentido de la vida, el universo y todo lo demás. Después de siete millones y medio de años meditando la pregunta, Pensamiento Profundo declara que la respuesta es cuarenta y dos, razonando que la pregunta fue mal planteada y debe ser formulada correctamente para entender la respuesta.";
* split_words($text, 100);
* // Según The Hitchhiker's Guide to the Galaxy, un grupo de exploradores de una raza de seres pandimensionales e hiperinteligentes \n
* // construyen Pensamiento Profundo, la segunda mejor computadora de todos los tiempos, para obtener la respuesta al sentido \n
* // de la vida, el universo y todo lo demás. \n
* // Después de siete millones y medio de años meditando la pregunta, Pensamiento Profundo declara que la respuesta es cuarenta \n
* // y dos, razonando que la pregunta fue mal planteada y debe ser formulada correctamente para entender la respuesta.
*
* @param string $text
* @param int $limit
* @return string
*/
function split_words($text, $limit)
{
// Almacenamos el conteo de cada letra
$count = 0;
// El string que almacena cada oración cortada
$sentence = '';
$words = [];
$all_the_words = explode(' ', $text);
foreach ($all_the_words as $word) {
// Vamos incrementando el conteo de cada pedazo
$count += strlen($word);
// Vamos concatenando cada palabra a un pedazo
$sentence .= "{$word} ";
// Si llegamos al límite o si hay un punto, creamos otro
// elemento del array, otro pedazo
if ($count >= $limit || strpos($word, '.') !== false) {
$words[] = $sentence;
// Reset
$count = 0;
$sentence = '';
}
}
// Si queda algunas palabras rezagadas, la agregamos al final
$words[] = $sentence;
// Devolvemos el string trimeado y separado por retornos de carro
return trim(implode("\n", $words));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment