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
)
War es hilfreich?

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

Weitere Einzelheiten und bencmark Informationen über

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top