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 une place d'index dans le tableau.
Si la chaîne est:
My text1
My text2
My text3
Le résultat que je veux est le suivant:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
la source
la source
s($yourString)->normalizeLineEndings()
est disponible avec github.com/delight-im/PHP-Str (bibliothèque sous licence MIT) qui a beaucoup d'autres aides de chaîne utiles. Vous voudrez peut-être jeter un œil au code source.Réponses:
Vous pouvez utiliser la
explode
fonction en utilisant "\n
" comme séparateur:Par exemple, si vous avez ce morceau de code:
Vous obtiendrez cette sortie:
Notez que vous devez utiliser une chaîne entre guillemets doubles , donc
\n
est en fait interprété comme un saut de ligne.(Voir cette page de manuel pour plus de détails.)
la source
\n
vous pouvez utiliser la constante prédéfiniePHP_EOL
.PHP_EOL
. Vous devez utiliserpreg_split("/\\r\\n|\\r|\\n/", $value)
.Je l'ai toujours utilisé avec beaucoup de succès:
(mis à jour avec la version finale, merci @LobsterMan)
la source
\R
matchs\n
,\r
et\r\n
/\r?\n/
Un saut de ligne est défini différemment sur différentes plates-formes, \ r \ n, \ r ou \ n.
En utilisant RegExp pour diviser la chaîne, vous pouvez faire correspondre les trois avec \ R
Donc pour votre problème:
Cela correspondrait à des sauts de ligne sur Windows, Mac et Linux!
la source
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
meilleur choixPHP connaît déjà les caractères de nouvelle ligne du système actuel. Utilisez simplement la constante EOL.
la source
trim()
les chaînes résultantes pour supprimer tout espace blanc superflu.Une alternative à la réponse de David qui est plus rapide (beaucoup plus rapide) est d'utiliser
str_replace
etexplode
.Ce qui se passe est le suivant: les
sauts de ligne pouvant prendre différentes formes, je
str_replace
\ r \ n, \ n \ r et \ r avec \ n à la place (et l'original \ n est conservé).Ensuite, explosez
\n
et vous avez toutes les lignes dans un tableau.J'ai fait un benchmark sur le src de cette page et divisé les lignes 1000 fois dans une boucle for et: a
preg_replace
pris une moyenne de 11 secondes astr_replace & explode
pris une moyenne d'environ 1 secondePlus de détails et d'informations sur mon forum sur mon forumla source
David: Grande direction, mais vous avez manqué \ r. cela a fonctionné pour moi:
la source
Vous n'avez pas besoin des fonctions preg_ * ni des motifs preg ni str_replace dedans, etc. pour casser avec succès une chaîne en tableau par des sauts de ligne. Dans tous les scénarios, que ce soit Linux / Mac ou m $, cela suffira.
la source
Le "(au lieu de ') est assez important car sinon, le saut de ligne ne sera pas interprété.
la source
StackOverflow ne me permettra pas de commenter la réponse de hesselbom (pas assez de réputation), donc j'ajoute la mienne ...
Cela a fonctionné le mieux pour moi car il élimine également automatiquement les espaces de début (deuxième \ s *) et de fin (premier \ s *) et ignore également les lignes vides (l'indicateur PREG_SPLIT_NO_EMPTY).
- = OPTIONS = -
Si vous voulez garder les espaces blancs en tête, débarrassez-vous simplement du second \ s * et faites-en plutôt un rtrim () ...
Si vous devez conserver des lignes vides, débarrassez-vous du drapeau NULL (ce n'est qu'un espace réservé) et PREG_SPLIT_NO_EMPTY, comme ça ...
Ou en gardant à la fois les espaces blancs et les lignes vides ...
Je ne vois aucune raison pour laquelle vous voudriez toujours garder un espace blanc, 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 titre le suggère), c'est CECI simple (comme mentionné par Jan Goyvaerts) ...
la source
m
modificateur n'est pas vraiment nécessaire, n'est-ce pas? Cela n'affecte-t-il pas seulement^
et$
?Comme d'autres réponses l'ont spécifié, assurez-vous de l'utiliser
explode
plutôt quesplit
parce que PHP 5.3.0split
est obsolète. c'est-à-dire que ce n'est PAS la façon dont vous voulez le faire:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
la source
Pour ceux qui essaient d'afficher des tâches cron dans une table crontab et qui sont frustrés de la façon de séparer chaque ligne, utilisez explode:
l'utilisation de '\ n' ne semble pas fonctionner mais chr (10) fonctionne bien: D
j'espère que cela vous évitera quelques maux de tête.
la source
'\n'
ne fonctionne pas car les séquences d'échappement ne sont pas interprétées entre guillemets simples, vous devez utiliser des guillemets doubles à la place:"\n"
au lieu de'n'
Lire php.net/manual/en/language.types.string.phpvous pouvez utiliser ceci:
la source
Vous pouvez faire un $ string = nl2br ($ string) pour que votre saut de ligne soit changé en
De cette façon, peu importe si le système utilise \ r \ n ou \ n ou \ r
Ensuite, vous pouvez le nourrir dans un tableau:
la source
C'est ma façon:
Cela sautera également toutes les lignes vides.
la source
vrai tableau:
Intégrer en ligne:
la source
Ramassé cela dans les documents php:
la source
Cette méthode fonctionne toujours pour moi:
la source
Utiliser uniquement le package «de base» est également une solution pour les cas simples:
la source
En utilisant n'importe quel caractère spécial entre la chaîne ou le saut de ligne à l'
\n
aide de l'explosion PHP, nous pouvons y parvenir.la source