2009-04-16 14 views
12

He una variable que necesita las cuatro primeras líneas despojadas a cabo antes de ser mostrados:Eliminar cuatro primeras líneas de la parte superior en el contenido almacenado en una variable

Error Report Submission 
From: First Last, [email protected], 12345 
Date: 2009-04-16 04:33:31 pm Eastern 

The content to be output starts here and can go on for any number of lines. 

tengo que quitar la 'cabecera' de estos datos antes de que lo muestre como parte de una vista de 'informes de errores pendientes'.

Respuesta

22

Mmm. Estoy seguro de que alguien va a venir con algo ingenioso/más corto/más bonito, pero ¿qué tal:

$str = implode("\n", array_slice(explode("\n", $str), 4)); 

Si eso es demasiado desagradable, siempre se puede abstracta a la basura:

function str_chop_lines($str, $lines = 4) { 
    return implode("\n", array_slice(explode("\n", $str), $lines)); 
} 

$str = str_chop_lines($str); 

EDITAR: pensándolo un poco más, no recomendaría usar la función str_chop_lines a menos que planee hacer esto en muchas partes de su aplicación. Creo que el trazador de líneas original original es lo suficientemente claro y cualquiera que tropiece con str_chop_lines puede no darse cuenta de que el valor predeterminado es 4 sin ir a la definición de la función.

+0

Creo que su primer ejemplo es más fácil de mirar por encima y entender su significado más rápido que otras soluciones de 1 línea. 'más uno': P – alex

+0

Sí, al principio pensé que era feo, pero es bastante claro en lo que hace, creo. –

+2

agregue el parámetro "límite" adicional a la función de explosión para mayor eficiencia: explotar ("\ n", $ str, 5) – nickf

1

Divida la cadena en una matriz usando split(rex), donde rex coincide con dos líneas nuevas consecutivas, y luego concatenan toda la matriz, excepto el primer elemento (que es el encabezado).

2

strpos ayuda mucho: He aquí un ejemplo:

// $myString = "blah blah \n \n \n etc \n \n blah blah"; 

$len = strpos($myString, "\n\n"); 
$string = substr($myString, $len, strlen($myString) - $len); 

$ string a continuación contiene la cadena después de encontrar esos dos saltos de línea en una fila.

+0

¿Ha probado esto? Si no me funciona, strpos devuelve la posición de la primera aparición, no lo que viene después. –

+0

Disculpa: edité mi publicación para hacerlo de otra manera y dejé la parte que realmente lo hizo. – Anthony

+0

¿Has probado esto? :) No está funcionando tampoco. Aunque no estoy seguro de por qué. –

4

$content = preg_replace("/^(.*\n){4}/", "", $content);

Cuestiones relacionadas