Question

J'ai une chaîne avec des sauts de ligne dans ma base de données. Je veux convertir cette chaîne en un tableau, et pour chaque nouvelle ligne, sauter un lieu d'index dans le tableau.

Si la chaîne est:

  

Mon text1
  Mon texte2
  Mon text3

Le résultat que je veux est la suivante:

Array
(
    [0] => My text1
    [1] => My text2
    [2] => My text3
)
Était-ce utile?

La solution

Vous pouvez utiliser la fonction explode , en utilisant "\n" comme séparateur:

$your_array = explode("\n", $your_string_from_db);

Par exemple, si vous avez ce morceau de code:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);

Vous obtiendrez cette sortie:

array
  0 => string 'My text1' (length=8)
  1 => string 'My text2' (length=8)
  2 => string 'My text3' (length=8)


Notez que vous devez utiliser un double- cité chaîne , donc \n est effectivement interprété comme une coupure de ligne.
(voir cette page manuel pour plus de détails)

Autres conseils

Je l'ai toujours utilisé cela avec succès:

$array = preg_split("/\r\n|\n|\r/", $string);

(mise à jour avec la dernière \ r, grâce @LobsterMan)

Un saut de ligne est définie différemment sur différentes plates-formes, \ r \ n, \ r ou \ n.

Utilisation RegExp pour diviser la chaîne que vous pouvez faire correspondre tous les trois avec \ R

Donc, pour votre problème:

$array = preg_split ('/$\R?^/m', $string);

Cela correspond des sauts de ligne sous Windows, Mac et Linux!

PHP connaît déjà le caractère de saut de ligne du système actuel (s). Il suffit d'utiliser la constante EOL.

explode(PHP_EOL,$string)

Une alternative à la Davids répondre qui est d'utiliser str_replace et explode plus rapide (voie rapide).

$arrayOfLines = explode("\n",
                    str_replace(array("\r\n","\n\r","\r"),"\n",$str)
            );

Qu'est-ce qui se passe est:
Étant donné que les sauts de ligne peuvent se présenter sous différentes formes, je str_replace \ r \ n \ n \ r et \ r \ n au lieu (et \ n d'origine sont conservés).
Puis exploser sur \n et vous avez toutes les lignes dans un tableau.

Je l'ai fait une référence sur le src de cette page et de diviser les lignes 1000 fois dans une boucle et:
preg_replace a pris une moyenne de 11 secondes
str_replace & explode a un moyen d'environ 1 seconde

Plus de détails et bencmark info sur mon forum

David: Grande direction, mais vous avez manqué \ r. cela a fonctionné pour moi:

$array = preg_split("/(\r\n|\n|\r)/", $string);
explode("\n", $str);

Le "(au lieu de « ) est tout à fait important que sinon, le saut de ligne wouln't s'interpréter.

Vous n'avez pas besoin des fonctions preg_ * ni modèles preg ni str_replace à l'intérieur, etc .. afin de sucessfuly briser une chaîne en tableau par les nouvelles lignes. Dans tous les scénarios, que ce soit Linux / Mac ou m $, cela va faire.

<?php 

 $array = explode(PHP_EOL, $string);
 // ...  
 $string = implode(PHP_EOL, $array);

?>
  

PHP_EOL est une constante en maintenant le caractère de saut de ligne (s) utilisé par la plate-forme serveur.

StackOverflow ne me permet pas de faire des commentaires sur la réponse de Hesselbom (pas assez de réputation), donc j'ajouter mon ...

$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);

Ce qui fonctionne le mieux pour moi, car il élimine également le premier (deuxième \ s *) et arrière (premier \ s *) des espaces automatiquement et également des lignes vides saute (le drapeau de PREG_SPLIT_NO_EMPTY).

- = OPTIONS = -

Si vous voulez garder les espaces au, il suffit de se débarrasser du second \ s * et en faire un rtrim () à la place ...

$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);

Si vous devez garder les lignes vides, se débarrasser de la valeur NULL (il est seulement un espace réservé) et le drapeau PREG_SPLIT_NO_EMPTY, comme si ...

$array = preg_split('/\s*\R\s*/', trim($text));

Ou en gardant les grandes lignes et espaces blancs vides ...

$array = preg_split('/\s*\R/', rtrim($text));

Je ne vois aucune raison pour laquelle vous avez toujours voulu garder les espaces de fin, donc je suggère de laisser le premier \ s * là-dedans. Mais, si tout ce que vous voulez est de diviser par nouvelle ligne (comme le suggère le titre), il est aussi simple (comme mentionné par Jan Goyvaerts) ...

$array = preg_split('/\R/', $text);
<anti-answer>

Comme d'autres réponses ont indiqué, assurez-vous d'utiliser explode plutôt que split parce que PHP 5.3.0 split est dépréciée. à savoir ce qui suit est pas la façon dont vous voulez faire:

$your_array = split(chr(10), $your_string);

LF = "\ n" = CHR (10), CR = "\ r" = CHR (13)

</anti-answer>

Pour tous ceux qui essaient d'afficher cronjobs dans un crontab et obtenir frustré sur la façon de séparer chaque ligne, utilisez exploser:

$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);

en utilisant '\ n' doesnt semblent fonctionner, mais chr (10) fonctionne très bien: D

espère que cela va quelqu'un des maux de tête.

vous pouvez utiliser ceci:

 \str_getcsv($str,PHP_EOL);

Vous pouvez faire une chaîne de $ = nl2br ($ string) afin que votre saut de ligne est modifiée pour

<br />. 

De cette façon, peu importe si le système utilise \ r \ n ou \ n ou \ r

Ensuite, vous pouvez l'alimenter dans un tableau:

$array = explode("<br />", $string);
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);

foreach ($arr as $line_num => $line) {
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

vrai tableau:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);

$array = array(); // inisiasi variable array in format array

foreach ($arr as $line) { // loop line by line and convert into array
    $array[] = $line;
};

print_r($array); // display all value

echo $array[1]; // diplay index 1

Intégrer en ligne:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>

dans ce Picked les php docs:

<?php
  // split the phrase by any number of commas or space characters,
  // which include " ", \r, \t, \n and \f

  $keywords = preg_split("/[\s,]+/", "hypertext language, programming");
  print_r($keywords);
?>

Cette méthode fonctionne toujours pour moi:

$uniquepattern="gd$#%@&~#"//Any set of characters which you dont expect to be present in user input $_POST['text'] better use atleast 32 charecters.
$textarray=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['text'])));

En utilisant uniquement le paquet « base » est aussi une solution pour les cas simples:

> s <- "a\nb\rc\r\nd"
> l <- strsplit(s,"\r\n|\n|\r")
> l  # the whole list...
[[1]]
[1] "a" "b" "c" "d"
> l[[1]][1] # ... or individual elements
[1] "a"
> l[[1]][2]
[1] "b"
> fun <- function(x) c('Line content:', x) # handle as you wish
> lapply(unlist(l), fun)

C'est ma façon:

$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);

Cela aussi sauter toutes les lignes vides aussi.

L'utilisation d'un caractère spécial entre la chaîne ou saut de ligne \n en utilisant PHP EXPLOSER nous pouvons y parvenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top