2010-03-15 6 views
1

i ont une variable comme ce qui suit et je veux une fonction pour ne garder que les 20 premières lignes, de sorte qu'il bandes toutes les lignes supplémentaires \ n plus de 20.PHP comment limiter les lignes dans une chaîne?

<?php 
$mytext="Line1 
Line2 
Line3 
....." 

keeptwentyline($mytext); 
?> 

Répondre

7

Je suppose un (peut-être un peu muet ^^) solution consisterait à:

  • explode la chaîne dans un réseau de lignes
  • ne conserver que les premières lignes X, en utilisant, par exemple, array_slice
  • implode retour dans une chaîne.


Quelque chose comme ça correspondrait à cette idée:

var_dump(keepXlines($mytext, 5)); 

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

Note: je suis passé le nombre de lignes en tant que paramètre - de cette façon, la fonction peut être utilisée ailleurs ;-)
Et si le paramètre est pas donné, il prend la valeur par défaut: 10


Mais il pourrait y avoir un moyen intelligent ^^

(que l'on aura probablement besoin qiute de la mémoire, pour copier la chaîne dans un tableau, extraire les premières lignes, recréez une chaîne ...)

+0

qui est le meilleur que je pouvais venir avec – Andy

+0

:) Je vois que je ne suis pas le seul qui a cette idée ^^ * (Même si je serais curieux de connaître d'autres façons, en fait ^^) * –

+0

Hmm il y a une autre façon dont j'ai pensé à ... – Andy

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

Ou (probablement plus rapide)

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

    return substr($string, 0, $offset); 
} 
+0

+1 Cela devrait être array_slice, cependant, pas array_splice – soulmerge

+4

http://php.net/manual/fr/function .array-splice.php :) – Andy

Questions connexes