2009-04-16 6 views
12

ho una variabile che ha bisogno le prime quattro righe spogliato fuori prima di essere visualizzato:Eliminare prime quattro righe dalla parte superiore a contenuto memorizzato in una variabile

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. 

Ho bisogno di rimuovere il 'colpo di testa' da questi dati prima di visualizzarlo come parte di una vista "Segnalazione errori in sospeso".

risposta

22

Mmm. Sono sicuro che qualcuno sta per venire con qualcosa di intelligente/più breve/più bello, ma come circa:

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

Se questo è troppo brutto, si può sempre astratto via:

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

$str = str_chop_lines($str); 

EDIT: Pensandoci ancora, non raccomanderei l'uso della funzione str_chop_lines a meno che tu non abbia intenzione di farlo in molte parti della tua applicazione. L'originale one-liner è abbastanza chiaro, credo, e chiunque inciampi su str_chop_lines potrebbe non rendersi conto che il valore predefinito è 4 senza andare alla definizione della funzione.

+0

Credo che il vostro primo esempio è più facile da sguardo oltre e comprendere il suo significato più veloce rispetto ad altre soluzioni 1 linea. 'plus uno': P – alex

+0

Sì, all'inizio pensavo fosse brutto ma è abbastanza chiaro su quello che fa, penso. –

+2

aggiungi il parametro extra "limit" alla funzione explode per una maggiore efficienza: explode ("\ n", $ str, 5) – nickf

1

Dividere la stringa in una matrice utilizzando split(rex), dove rex corrisponde a due righe nuove consecutive e quindi concatena l'intera matrice, ad eccezione del primo elemento (che è l'intestazione).

2

strpos aiuta molto: Ecco un esempio:

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

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

$ stringa contiene la stringa dopo aver trovato queste due nuove linee di fila.

+0

Hai provato questo? Non mi funziona, lo strpos restituisce la posizione della prima occorrenza, non quello che viene dopo. –

+0

Mi dispiace, ho modificato il mio post per farlo in un modo diverso e ho omesso la parte che effettivamente lo ha fatto! – Anthony

+0

Hai provato _questo? :) Non funziona neanche. Non sono sicuro del perché, comunque. –

4

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

Problemi correlati