Dividir texto sin cortar palabras

En este artículo vamos a ver una función para dividir texto sin cortar palabras y con el tamaño que queramos especificar. Se trata de una función muy útil en los casos que queremos ajustar textos en varios párrafos de la misma longitud.

Una consideración importante es que la prioridad de este código es no cortar palabras, de modo que siempre buscará espacios a partir del punto de corte. Esto significa que el tamaño de los cortes puede ser ligeramente superior al especificado y, en caso de no encontrar espacios, mostará todo el texo.

Vamos a ver la función escrita en JavaScript y escrita en PHP, ambas funcionan con la misma lógica y ofrecen el mismo resultado.

Dividir texto sin cortar palabras en JavaScript

  function cortarTexto(text, max) {
    let result = [];
    let ini = 0;
    while (ini < text.length) {
      let end = text.indexOf(' ', ini + max);
      let cut = (end === -1) ? text.length : end;
      result.push(text.slice(ini, cut));
      ini = cut + 1;
    }
    return result;
  }

La explicación detallada y el funcionamiento del código para dividir texto sin cortar palabras en JavaScript es la siguiente:

  • let result = []; Se crea un array llamado result que se utilizará para almacenar las partes cortadas del texto.
  • let ini = 0; Se inicializa una variable ini en 0, que representa el índice de inicio de la sección actual en el texto.
  • while (ini < text.length) { Se inicia un bucle while que se ejecutará mientras ini sea menor que la longitud total del texto. Esto significa que el bucle continuará hasta que se haya procesado todo el texto.
  • let end = text.indexOf(' ', ini + max); Se busca el índice de la primera aparición de un espacio en blanco (‘ ‘) en el texto, comenzando desde la posición ini + max. Esto busca el próximo espacio en blanco después de max caracteres desde la posición actual.
  • let cut = (end === -1) ? text.length : end; Se define una variable cut que determina dónde se cortará el fragmento actual. Si end es igual a -1 (lo que significa que no se encontró ningún espacio después de ini + max), cut se establece en la longitud total del texto (text.length). De lo contrario, cut se establece en la posición donde se encontró el siguiente espacio.
  • result.push(text.slice(ini, cut)); La parte del texto desde ini hasta cut se corta utilizando la función slice y se agrega al array result. Esto almacena la parte cortada en el array.
  • ini = cut + 1; Se actualiza ini para que apunte al primer carácter después de cut, de modo que en la próxima iteración del bucle, comenzaremos a buscar el próximo espacio en blanco desde ese punto.
  • El bucle se repite hasta que ini sea mayor o igual que la longitud total del texto, lo que significa que se han procesado todas las partes del texto.
  • Finalmente, la función devuelve el array result que contiene todas las partes cortadas del texto.

Esta función divide un texto en partes de longitud igual o superior a max caracteres. Busca el próximo espacio en blanco después de max caracteres y corta el texto en ese punto. Luego, almacena cada parte cortada en un array y continúa el proceso hasta que todo el texto se ha procesado.

// Ejemplo de uso:
const texto = "Este es un ejemplo de un texto largo que se debe cortar en partes";
const maximo = 15;
console.log(cortarTexto(texto, maximo));

Y el resultado obtenido sería:

Array(4) [ "Este es un ejemplo", "de un texto largo", "que se debe cortar", "en partes" ]
0: "Este es un ejemplo"
1: "de un texto largo"
2: "que se debe cortar"
3: "en partes"

Dividir texto en PHP

function cortarTexto($text, $max) {
    $result = [];
    $ini = 0;
    $textLength = strlen($text);
    while ($ini < $textLength) {
        $end = strpos($text, ' ', min($ini + $max, $textLength));
        $cut = ($end === false) ? $textLength : $end;
        $result[] = substr($text, $ini, $cut - $ini);
        $ini = $cut + 1;
    }
    return $result;
}

La explicación detallada y el funcionamiento del código para dividir texto sin cortar palabras en PHP es la siguiente:

  • function cortarTexto($text, $max) { Esta línea define una función llamada cortarTexto que toma dos argumentos: $text, que es el texto que deseas cortar, y $max, que es el tamaño máximo de cada fragmento.
  • $result = []; Se inicializa una variable $result como un arreglo vacío. Este arreglo se utilizará para almacenar los fragmentos del texto resultantes.
  • $ini = 0; Se inicializa una variable $ini con el valor 0. Esta variable se utilizará como un puntero para realizar un seguimiento de la posición actual en el texto.
  • $textLength = strlen($text); Se calcula la longitud total del texto y se almacena en la variable $textLength. Esto se hace utilizando la función strlen, que devuelve la cantidad de caracteres en una cadena.
  • while ($ini < $textLength) { Esto inicia un bucle while que se ejecutará mientras la posición actual ($ini) sea menor que la longitud total del texto.
  • $end = strpos($text, ' ', min($ini + $max, $textLength)); Aquí se busca la próxima aparición del carácter espacio (‘ ‘) en el texto, a partir de la posición $ini + $max o hasta la longitud total del texto, lo que ocurra primero. Esto se hace utilizando la función strpos y la función min. Si no se encuentra ningún espacio después de $ini + $max, $end contendrá false.
  • $cut = ($end === false) ? $textLength : $end; Se define una variable $cut que determina dónde se cortará el fragmento actual. Si $end es igual a false (lo que significa que no se encontró ningún espacio después de $ini + $max), $cut se establece en la longitud total del texto ($textLength). De lo contrario, $cut se establece en la posición donde se encontró el siguiente espacio.
  • $result[] = substr($text, $ini, $cut - $ini); Se agrega el fragmento actual del texto al arreglo $result utilizando la función substr. La función substr toma una cadena y dos índices, y devuelve una porción del texto original, desde $ini hasta $cut, sin incluir $cut. Esto crea un fragmento que se agrega al arreglo $result.
  • $ini = $cut + 1; Se actualiza la variable $ini para que apunte a la posición después del último carácter del fragmento actual. Esto asegura que no se corte ninguna palabra en medio.
  • El bucle while continúa ejecutándose hasta que $ini sea mayor o igual que la longitud total del texto.
  • return $result; Finalmente, la función devuelve el arreglo $result, que contiene todos los fragmentos del texto.

Esta función PHP realiza la misma tarea que la función JavaScript, dividiendo un texto en fragmentos de un tamaño especificado (sin encuentra espacios) y devuelve un arreglo con los fragmentos resultantes.

// Ejemplo de uso
$texto = "Este es un ejemplo de un texto largo que se debe cortar en partes";
$maximo = 15;
var_dump($texto, cortarTexto($texto, $maximo));

Y el resultado sería:

array (size=4)
  0 => string 'Este es un ejemplo' (length=18)
  1 => string 'de un texto largo' (length=17)
  2 => string 'que se debe cortar' (length=18)
  3 => string 'en partes' (length=9)

¡ Espero que este artículo sea de vuestro interés !

Deja un comentario