2009-04-16 4 views
12

je une variable qui a besoin des quatre premières lignes dépouillées avant d'être affiché:Supprimer quatre premières lignes du haut contenu stocké dans une 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. 

Je dois enlever la « tête » de ces données avant de l'afficher dans le cadre d'une vue "rapports d'erreurs en attente".

Répondre

22

Mmm. Je suis sûr que quelqu'un va venir avec quelque chose de chouette/plus court/plus agréable, mais que diriez-vous:

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

Si cela est trop disgracieux, vous pouvez toujours abstraire loin:

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

$str = str_chop_lines($str); 

EDIT: En y réfléchissant un peu plus, je ne recommanderais pas d'utiliser la fonction str_chop_lines à moins que vous ne prévoyiez de le faire dans de nombreuses parties de votre application. Le one-liner d'origine est assez clair, je pense, et quiconque trébuche sur str_chop_lines peut ne pas réaliser que la valeur par défaut est 4 sans aller à la définition de la fonction.

+0

Je crois que votre premier exemple est plus facile à comprendre et coup d'œil sur sa signification plus rapide que d'autres solutions 1 ligne. 'plus uno': P – alex

+0

Ouais, au début je pensais que c'était moche mais c'est assez clair sur ce qu'il fait, je pense. –

+2

ajouter le paramètre "limite" supplémentaire à la fonction exploser pour plus d'efficacité: exploser ("\ n", $ str, 5) – nickf

1

Fractionnez la chaîne en un tableau à l'aide de split(rex), où rex correspond à deux retours à la ligne consécutifs, puis concaténéz le tableau entier, à l'exception du premier élément (qui est l'en-tête).

2

strpos aide beaucoup: Voici un exemple:

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

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

$ string contient alors la chaîne après avoir trouvé ces deux sauts de ligne dans une rangée.

+0

Avez-vous testé cela? Ca ne me fonctionne pas, les strpos renvoient la position de la première occurrence, pas ce qui vient après. –

+0

Désolé à ce sujet - édité mon post pour le faire d'une manière différente et a omis la partie qui l'a fait! – Anthony

+0

Avez-vous testé _this_? :) Ça ne marche pas non plus. Je ne suis pas sûr pourquoi, cependant. –

4

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

Questions connexes