Ich habe eine Zeichenfolge mit Zeilenumbrüchen in meiner Datenbank. Ich möchte diesen String in ein Array konvertieren und für jede neue Zeile eine Indexstelle im Array überspringen.
Wenn die Zeichenfolge lautet:
My text1
My text2
My text3
Das Ergebnis, das ich möchte, ist folgendes:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
quelle
quelle
s($yourString)->normalizeLineEndings()
ist mit github.com/delight-im/PHP-Str (Bibliothek unter MIT-Lizenz) verfügbar, die viele andere nützliche String-Helfer enthält. Vielleicht möchten Sie einen Blick auf den Quellcode werfen.Antworten:
Sie können die
explode
Funktion mit "\n
" als Trennzeichen verwenden:Zum Beispiel, wenn Sie diesen Code haben:
Sie würden diese Ausgabe erhalten:
Beachten Sie, dass Sie eine Zeichenfolge in doppelten Anführungszeichen verwenden müssen , die
\n
tatsächlich als Zeilenumbruch interpretiert wird.(Weitere Informationen finden Sie auf dieser Handbuchseite.)
quelle
\n
können Sie die vordefinierte Konstante verwendenPHP_EOL
.PHP_EOL
. Sie müssen verwendenpreg_split("/\\r\\n|\\r|\\n/", $value)
.Ich habe das immer mit großem Erfolg benutzt:
(aktualisiert mit dem finalen \ r, danke @LobsterMan)
quelle
\R
Spiele\n
,\r
und\r\n
/\r?\n/
Ein Zeilenumbruch wird auf verschiedenen Plattformen unterschiedlich definiert: \ r \ n, \ r oder \ n.
Mit RegExp zum Teilen der Zeichenfolge können Sie alle drei mit \ R abgleichen
Also für dein Problem:
Das würde zu Zeilenumbrüchen unter Windows, Mac und Linux passen!
quelle
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
bessere WahlPHP kennt bereits die Zeilenumbruchzeichen des aktuellen Systems. Verwenden Sie einfach die EOL-Konstante.
quelle
trim()
die resultierenden Zeichenfolgen verwenden, um überflüssige Leerzeichen zu entfernen.Eine Alternative zu Davids Antwort, die schneller (viel schneller) ist, ist die Verwendung von
str_replace
undexplode
.Was passiert ist:
Da Zeilenumbrüche in verschiedenen Formen auftreten können, werden
str_replace
stattdessen I \ r \ n, \ n \ r und \ r mit \ n (und das Original \ n bleiben erhalten).Dann explodieren Sie weiter
\n
und Sie haben alle Zeilen in einem Array.Ich habe einen Benchmark auf dem src dieser Seite durchgeführt und die Zeilen 1000 Mal in einer for-Schleife geteilt und:
preg_replace
einen Durchschnitt von 11 Sekunden genommen,str_replace & explode
einen Durchschnitt von ungefähr 1 SekundeWeitere Details und bencmark Infos in meinem Forumquelle
David: Großartige Richtung, aber du hast es verpasst. das hat bei mir funktioniert:
quelle
Sie benötigen weder preg_ * -Funktionen noch preg-Muster noch str_replace innerhalb usw., um einen String erfolgreich durch Zeilenumbrüche in ein Array zu zerlegen. In allen Szenarien, sei es Linux / Mac oder m $, reicht dies aus.
quelle
Das "(anstelle von ') ist ziemlich wichtig, da sonst der Zeilenumbruch nicht interpretiert wird.
quelle
Mit StackOverflow kann ich die Antwort von hesselbom nicht kommentieren (nicht genügend Ruf), daher füge ich meine eigene hinzu ...
Dies funktionierte am besten für mich, da außerdem führende (zweite \ s *) und nachfolgende (erste \ s *) Leerzeichen automatisch eliminiert werden und auch Leerzeilen übersprungen werden (das PREG_SPLIT_NO_EMPTY-Flag).
- = OPTIONEN = -
Wenn Sie weiterhin führende Leerzeichen verwenden möchten, entfernen Sie einfach das zweite \ s * und machen Sie es stattdessen zu einem rtrim () ...
Wenn Sie leere Zeilen behalten müssen, entfernen Sie das NULL-Flag (es ist nur ein Platzhalter) und das PREG_SPLIT_NO_EMPTY-Flag wie folgt ...
Oder sowohl führende Leerzeichen als auch Leerzeilen beibehalten ...
Ich sehe keinen Grund, warum Sie jemals Leerzeichen nachziehen möchten, daher schlage ich vor, die ersten \ s * dort zu belassen. Aber wenn Sie nur nach neuen Zeilen aufteilen möchten (wie der Titel schon sagt), ist dies DIESES Einfache (wie von Jan Goyvaerts erwähnt) ...
quelle
m
Modifikator wird nicht wirklich benötigt, oder? Betrifft das nicht nur^
und$
?Verwenden Sie, wie in anderen Antworten angegeben, die Verwendung
explode
und nicht die Verwendungsplit
von PHP 5.3.0split
. Das Folgende ist NICHT so, wie Sie es tun möchten:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
quelle
Verwenden Sie explode, wenn Sie versuchen, Cronjobs in einem Crontab anzuzeigen und frustriert sind, wie jede Zeile getrennt werden soll:
Die Verwendung von '\ n' scheint nicht zu funktionieren, aber chr (10) funktioniert gut: D.
Ich hoffe, das erspart jemandem Kopfschmerzen.
quelle
'\n'
funktioniert nicht, da Escape-Sequenzen nicht in einfachen Anführungszeichen interpretiert werden. Sie müssen stattdessen doppelte Anführungszeichen verwenden:"\n"
anstelle von'n'
Read php.net/manual/en/language.types.string.phpSie können dies verwenden:
quelle
Sie können einen $ string = nl2br ($ string) ausführen, sodass Ihr Zeilenumbruch in geändert wird
Auf diese Weise spielt es keine Rolle, ob das System \ r \ n oder \ n oder \ r verwendet
Dann können Sie es in ein Array einspeisen:
quelle
Das ist mein Weg:
Dadurch werden auch alle Leerzeilen übersprungen.
quelle
wahres Array:
Online einbetten:
quelle
Habe dies in den PHP-Dokumenten aufgegriffen:
quelle
Diese Methode funktioniert immer bei mir:
quelle
Die Verwendung nur des Basispakets ist auch eine Lösung für einfache Fälle:
quelle
Mit einem beliebigen Sonderzeichen zwischen dem String oder dem Zeilenumbruch
\n
mit PHP Explode können wir dies erreichen.quelle