PHP cómo limitar las líneas en una cadena?

Tengo una variable como la siguiente y quiero que una función solo conserve las primeras 20 líneas, por lo que quitará cualquier línea \ n adicional de más de 20.

 

Supongo que una solución (quizás un poco tonta) sería:

  • explode la cadena en una matriz de líneas
  • mantener solo las X primeras líneas, usando, por ejemplo, array_slice
  • implode nuevamente en una cuerda.

Algo así correspondería a esta idea:

 var_dump(keepXlines($mytext, 5)); function keepXLines($str, $num=10) { $lines = explode("\n", $str); $firsts = array_slice($lines, 0, $num); return implode("\n", $firsts); } 

Nota: pasé el número de líneas como parámetro; de esa manera, la función puede usarse en otro lugar 😉
Y si el parámetro no está dado, toma el valor predeterminado: 10

Pero podría haber alguna manera inteligente ^^

(Probablemente, ese necesitará algo de memoria, para copiar la cadena en una matriz, extraer las primeras líneas, volver a crear una cadena …)

 function keeptwentyline($string) { $string = explode("\n", $string); array_splice($string, 20); return implode("\n", $string); } 

O (probablemente más rápido)

 function keepLines($string, $lines = 20) { for ($offset = 0, $x = 0; $x < $lines; $x++) { $offset = strpos($string, "\n", $offset) + 1; } return substr($string, 0, $offset); }