W mojej bazie danych mam ciąg znaków z podziałem linii. Chcę przekonwertować ten ciąg na tablicę i dla każdej nowej linii przeskocz o jedno miejsce indeksu w tablicy.
Jeśli ciąg jest:
My text1
My text2
My text3
Chcę, aby wynik był następujący:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
źródło
źródło
s($yourString)->normalizeLineEndings()
jest dostępna w witrynie github.com/delight-im/PHP-Str (biblioteka na licencji MIT), która zawiera wiele innych przydatnych pomocników łańcucha. Możesz rzucić okiem na kod źródłowy.Odpowiedzi:
Możesz użyć tej
explode
funkcji, używając „\n
” jako separatora:Na przykład, jeśli masz ten fragment kodu:
Otrzymasz ten wynik:
Zauważ, że musisz użyć podwójnego cudzysłowu , więc
\n
jest on interpretowany jako podział wiersza.(Więcej informacji na tej stronie podręcznika).
źródło
\n
możesz użyć predefiniowanej stałejPHP_EOL
.PHP_EOL
. Musisz użyćpreg_split("/\\r\\n|\\r|\\n/", $value)
.Zawsze używałem tego z wielkim sukcesem:
(zaktualizowane do ostatniego \ r, dzięki @LobsterMan)
źródło
\R
mecze\n
,\r
i\r\n
/\r?\n/
Podział linii jest różnie definiowany na różnych platformach, \ r \ n, \ r lub \ n.
Używając RegExp do podzielenia łańcucha możesz dopasować wszystkie trzy za pomocą \ R
Więc dla twojego problemu:
To by pasowało do podziałów linii w systemach Windows, Mac i Linux!
źródło
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
lepszy wybórPHP zna już znaki nowego wiersza obecnego systemu. Wystarczy użyć stałej EOL.
źródło
trim()
wynikowych ciągów, aby usunąć wszelkie zbędne białe znaki.Alternatywą dla odpowiedzi Davids'a, która jest szybsza (znacznie szybsza), jest użycie
str_replace
iexplode
.Co się dzieje:
Ponieważ podziały linii mogą mieć różne formy, I
str_replace
\ r \ n, \ n \ r, i \ r z \ n zamiast tego (i oryginalne \ n są zachowane).Następnie eksploduj
\n
i masz wszystkie linie w tablicy.Zrobiłem test porównawczy na src tej strony i podzieliłem linie 1000 razy w pętli for i:
preg_replace
wziąłem średnią z 11 sekundstr_replace & explode
wziąłem średnią z około 1 sekundyWięcej szczegółów i informacji bencmark na moim forumźródło
David: Świetny kierunek, ale nie trafiłeś. to działało dla mnie:
źródło
Nie potrzebujesz funkcji preg_ * ani wzorców preg, ani str_replace wewnątrz itp., Aby pomyślnie rozbić ciąg znaków na tablicę przez nowe linie. We wszystkich scenariuszach, czy to Linux / Mac, czy m $, wystarczy.
źródło
„(Zamiast”) jest dość ważne, ponieważ inaczej, łamanie linii nie zostanie zinterpretowane.
źródło
StackOverflow nie pozwoli mi skomentować odpowiedzi hesselbom (niewystarczająca reputacja), więc dodaję własną ...
Działa to dla mnie najlepiej, ponieważ automatycznie eliminuje początkowe (drugie \ s *) i końcowe (pierwsze \ s *) białe znaki, a także pomija puste linie (flaga PREG_SPLIT_NO_EMPTY).
- = OPCJE = -
Jeśli chcesz zachować wiodące białe znaki, po prostu pozbądź się sekund \ s * i zamiast tego ustaw rtrim () ...
Jeśli chcesz zachować puste wiersze, pozbądź się NULL (to tylko symbol zastępczy) i flagi PREG_SPLIT_NO_EMPTY, tak jak ...
Lub utrzymywanie zarówno wiodących białych znaków, jak i pustych linii ...
Nie widzę żadnego powodu, dla którego chciałbyś kiedykolwiek pozostawić końcowe białe znaki, więc sugeruję pozostawienie tam pierwszych znaków. Ale jeśli wszystko, czego chcesz, to podział według nowej linii (jak sugeruje tytuł), jest TO TAKIE proste (jak wspomniał Jan Goyvaerts) ...
źródło
m
Modyfikator nie jest naprawdę potrzebne to jest? Czy to nie dotyczy tylko^
i$
?Jak podano w innych odpowiedziach, użyj
explode
raczej niżsplit
dlatego, że od PHP 5.3.0split
jest przestarzały. tzn. NIE jest to sposób, w jaki chcesz to zrobić:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
źródło
Dla każdego, kto próbuje wyświetlić cronjobs w crontabie i denerwuje się, jak oddzielić każdą linię, skorzystaj z explode:
użycie '\ n' wydaje się nie działać, ale chr (10) działa dobrze: D
miej nadzieję, że to oszczędza komuś bólu głowy.
źródło
'\n'
nie działa, ponieważ sekwencje specjalne nie są interpretowane w pojedynczych cudzysłowach, zamiast"\n"
tego należy użyć podwójnych cudzysłowów: zamiast'n'
Read php.net/manual/en/language.types.string.phpmożesz użyć tego:
źródło
Możesz zrobić $ string = nl2br ($ string), aby zmienić podział linii na
W ten sposób nie ma znaczenia, czy system używa \ r \ n lub \ n lub \ r
Następnie możesz wprowadzić go do tablicy:
źródło
To jest mój sposób:
Spowoduje to również pominięcie wszystkich pustych linii.
źródło
prawdziwa tablica:
Umieść online:
źródło
Znalazłem to w dokumentach php:
źródło
Ta metoda zawsze działa dla mnie:
źródło
Użycie tylko pakietu „podstawowego” jest również rozwiązaniem dla prostych przypadków:
źródło
Używając dowolnego znaku specjalnego między ciągiem lub łamaniem wiersza
\n
za pomocą PHP, możemy to osiągnąć.źródło