Wie String in Array zu setzen, um neue Linie geteilt?
-
18-09-2019 - |
Frage
Ich habe einen String mit Zeilenumbrüchen in meiner Datenbank. Ich möchte diese Zeichenfolge in ein Array konvertieren, und für jede neue Zeile in dem Array einen Index Stelle springen.
Wenn die Zeichenfolge:
Meine text1
Mein text2
Mein text3
Das Ergebnis, das ich will, ist dies:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
Lösung
Sie können die explode
Funktion "\n
" als Trennzeichen verwenden:
$your_array = explode("\n", $your_string_from_db);
Zum Beispiel, wenn Sie dieses Stück Code haben:
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);
Sie würden diese Ausgabe erhalten:
array
0 => string 'My text1' (length=8)
1 => string 'My text2' (length=8)
2 => string 'My text3' (length=8)
Beachten Sie, dass Sie eine doppelt verwenden String zitiert, so \n
ist eigentlich als Zeilenumbruch interpretiert.
(siehe das Handbuch für weitere Details)
Andere Tipps
Ich habe das immer dann verwendet mit großem Erfolg:
$array = preg_split("/\r\n|\n|\r/", $string);
(aktualisiert mit der endgültigen \ r dank @LobsterMan)
Ein Zeilenumbruch wird anders definiert auf verschiedene Plattformen, \ r \ n \ r oder \ n.
RegExp Verwendung der Zeichenfolge aufteilen können Sie alle drei mit \ R übereinstimmen
Also für Ihr Problem:
$array = preg_split ('/$\R?^/m', $string);
Das würde Zeilenumbrüche auf Windows, Mac und Linux zusammenzupassen!
PHP kennt bereits das Newline-Zeichen des aktuellen Systems (s). Verwenden Sie einfach den EOL-Konstante ist.
explode(PHP_EOL,$string)
Eine Alternative zu Davids beantworten, die schneller ist (viel schneller) ist str_replace
und explode
zu verwenden.
$arrayOfLines = explode("\n",
str_replace(array("\r\n","\n\r","\r"),"\n",$str)
);
Was passiert ist:
Da Zeilenumbrüche in verschiedenen Formen kommen, str_replace
I \ r \ n \ n \ r und \ r mit \ n statt (und original \ n bleiben erhalten).
Dann explodiert auf \n
und Sie haben alle Zeilen in einem Array.
Ich habe einen Benchmark auf dem src dieser Seite und teilen Sie die Linien 1000 mal in einer for-Schleife und:
preg_replace
nahm eine avg von 11 Sekunden
str_replace & explode
nahm eine avg von etwa 1 Sekunde
David: Great Richtung, aber man verpasst \ r. dies ist für mich:
$array = preg_split("/(\r\n|\n|\r)/", $string);
explode("\n", $str);
Die "(statt‚) ist ganz wichtig, da sonst wouln't der Zeilenumbruch interpretiert erhalten.
Sie brauchen nicht preg_ * Funktionen noch Preg Muster noch str_replace innerhalb, etc .., um die durch Zeilenumbrüche einen String in Array brechen sucessfuly. In allen Szenarien, sei es Linux / Mac oder m $, dies zu tun.
<?php
$array = explode(PHP_EOL, $string);
// ...
$string = implode(PHP_EOL, $array);
?>
PHP_EOL ist eine Konstante, die die Zeilenumbruch-Zeichen (s) durch Halten der Serverplattform verwendet.
Stackoverflow wird mir nicht erlauben, auf Hesselbom Antwort auf einen Kommentar (nicht genug Ruf), so dass ich das Hinzufügen meiner eigenen ...
$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);
Das ist für mich am besten funktionierte, weil es beseitigt auch führende (zweite \ s *) und hintere (erster \ s *) Leerzeichen automatisch und auch Leerzeilen (die PREG_SPLIT_NO_EMPTY Flag) überspringen.
- = OPTIONS = -
Wenn Sie führende Leerzeichen zu halten, füllen Sie einfach loszuwerden, die zweiten \ s * und macht es zu einem rtrim () statt ...
$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);
Wenn Sie leere Zeilen halten müssen, loszuwerden, die NULL (es ist nur ein Platzhalter) und PREG_SPLIT_NO_EMPTY Flagge, wie so ...
$array = preg_split('/\s*\R\s*/', trim($text));
oder beiden führenden Leerzeichen und leere Zeilen zu halten ...
$array = preg_split('/\s*\R/', rtrim($text));
Ich sehe keinen Grund, warum Sie jemals nachfolgende Leerzeichen wollen würde halten, so schlage ich vor dem Verlassen der ersten \ s * drin. Aber wenn alles, was Sie wollen, ist durch neue Linie zu spalten (wie der Titel schon sagt), ist es diese einfach (wie von Jan Goyvaerts erwähnt) ...
$array = preg_split('/\R/', $text);
<anti-answer>
Wie andere Antworten angegeben haben, müssen Sie explode
verwenden, anstatt split
denn als PHP 5.3.0 split
veraltet. das heißt, die folgende ist nicht so, wie Sie es tun wollen:
$your_array = split(chr(10), $your_string);
LF = "\ n" = CHR (10), CR = "\ r" = CHR (13)
</anti-answer>
Für jeden, der versucht cronjobs in einem crontab angezeigt werden und frustriert darüber, wie jede Zeile zu trennen, verwenden Sie explodieren:
$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);
mit '\ n' scheint nicht zu funktionieren, aber chr (10) funktioniert gut: D
Hoffnung das spart einige ein paar Kopfschmerzen.
Sie können diese verwenden:
\str_getcsv($str,PHP_EOL);
Sie können einen $ string = nl2br ($ string) tun, so dass Ihr Zeilenumbruch
geändert wird<br />.
Auf diese Weise spielt es keine Rolle, ob das System verwendet \ r \ n oder \ n oder \ r
Dann können Sie es in ein Array-Feed:
$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";
}
true Array:
$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
Embed Online:
body, html, iframe {
width: 100% ;
height: 100% ;
overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>
diese in der php docs Abgeholt:
<?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);
?>
Diese Methode funktioniert immer für mich:
$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'])));
Mit nur das ‚Basis‘ Paket ist auch eine Lösung für einfache Fälle:
> 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)
Das ist meine Art und Weise:
$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);
Dies wird auch alle leeren Zeilen überspringen.
Mit Hilfe eines Sonderzeichen zwischen der Zeichenfolge oder einen Zeilenumbruch \n
PHP explode können wir dies erreichen.