Saya memiliki string dengan jeda baris di database saya. Saya ingin mengubah string itu menjadi sebuah array, dan untuk setiap baris baru, lompat satu tempat indeks dalam array.
Jika stringnya adalah:
My text1
My text2
My text3
Hasil yang saya inginkan adalah ini:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
sumber
sumber
s($yourString)->normalizeLineEndings()
ini tersedia dengan github.com/delight-im/PHP-Str (perpustakaan di bawah Lisensi MIT) yang memiliki banyak pembantu string berguna lainnya. Anda mungkin ingin melihat kode sumbernya.Jawaban:
Anda dapat menggunakan
explode
fungsi ini, menggunakan "\n
" sebagai pemisah:Misalnya, jika Anda memiliki kode ini:
Anda akan mendapatkan hasil ini:
Perhatikan bahwa Anda harus menggunakan string yang dikutip ganda , sehingga
\n
sebenarnya ditafsirkan sebagai garis-istirahat.(Lihat halaman manual itu untuk lebih jelasnya.)
sumber
\n
Anda dapat menggunakan konstanta yang telah ditentukanPHP_EOL
.PHP_EOL
. Anda harus menggunakanpreg_split("/\\r\\n|\\r|\\n/", $value)
.Saya selalu menggunakan ini dengan sangat sukses:
(diperbarui dengan final, terima kasih @OBsterMan)
sumber
\R
cocok\n
,\r
dan\r\n
/\r?\n/
Jeda baris didefinisikan secara berbeda pada platform yang berbeda, \ r \ n, \ r atau \ n.
Menggunakan RegExp untuk membagi string yang bisa Anda cocokkan ketiganya dengan \ R
Jadi untuk masalah Anda:
Itu akan cocok dengan jeda baris pada Windows, Mac dan Linux!
sumber
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
pilihan yang lebih baikPHP sudah mengetahui karakter baris baru sistem saat ini. Cukup gunakan konstanta EOL.
sumber
trim()
string yang dihasilkan untuk menghapus spasi kosong yang tidak ada.Alternatif jawaban Davids yang lebih cepat (lebih cepat) adalah dengan menggunakan
str_replace
danexplode
.Apa yang terjadi adalah:
Karena jeda baris dapat datang dalam bentuk yang berbeda, saya
str_replace
\ r \ n, \ n \ r, dan \ r dengan \ n sebagai gantinya (dan aslinya \ n dipertahankan).Kemudian meledak
\n
dan Anda memiliki semua baris dalam sebuah array.Saya melakukan patokan pada src halaman ini dan membagi garis 1000 kali dalam for for loop dan:
preg_replace
mengambil rata-rata 11 detikstr_replace & explode
mengambil rata-rata sekitar 1 detikLebih detail dan info bencmark di forum sayasumber
David: Arah yang bagus, tetapi Anda melewatkannya. ini bekerja untuk saya:
sumber
Anda tidak perlu fungsi preg_ * atau pola preg atau str_replace di dalam, dll. Untuk berhasil memecah string menjadi array oleh baris baru. Dalam semua skenario, baik itu Linux / Mac atau m $, ini akan dilakukan.
sumber
The "(bukannya ') cukup penting karena jika tidak, baris istirahat tidak akan ditafsirkan.
sumber
StackOverflow tidak akan memungkinkan saya untuk mengomentari jawaban hesselbom (tidak cukup reputasi), jadi saya menambahkan sendiri ...
Ini bekerja paling baik untuk saya karena juga menghilangkan spasi putih depan (kedua) dan trailing (pertama) secara otomatis dan juga melompati garis kosong (bendera PREG_SPLIT_NO_EMPTY).
- = PILIHAN = -
Jika Anda ingin tetap memimpin spasi putih, cukup singkirkan yang kedua * dan buatlah rtrim () sebagai gantinya ...
Jika Anda perlu menjaga baris kosong, singkirkan bendera NULL (itu hanya placeholder) dan PREG_SPLIT_NO_EMPTY, seperti begitu ...
Atau menjaga spasi putih dan baris kosong ...
Saya tidak melihat alasan mengapa Anda ingin tetap mengikuti spasi, jadi saya sarankan untuk meninggalkan yang pertama di sana. Tapi, jika semua yang Anda inginkan adalah untuk dibagi dengan baris baru (seperti judulnya), ini sederhana (seperti yang disebutkan oleh Jan Goyvaerts) ...
sumber
m
pengubah tidak benar-benar diperlukan itu? Bukankah itu hanya mempengaruhi^
dan$
?Seperti jawaban lain yang telah ditentukan, pastikan untuk menggunakan
explode
daripadasplit
karena PHP 5.3.0split
sudah usang. yaitu yang berikut ini BUKAN cara Anda ingin melakukannya:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
sumber
Bagi siapa pun yang mencoba menampilkan cronjobs di crontab dan merasa frustrasi tentang cara memisahkan setiap baris, gunakan explode:
menggunakan '\ n' tampaknya tidak berfungsi tetapi chr (10) berfungsi dengan baik: D
Semoga ini menyelamatkan seseorang sakit kepala.
sumber
'\n'
tidak berfungsi karena urutan pelarian tidak ditafsirkan dalam tanda kutip tunggal, Anda harus menggunakan tanda kutip ganda sebagai gantinya:"\n"
alih-alih'n'
Baca php.net/manual/en/language.types.string.phpAnda bisa menggunakan ini:
sumber
Anda dapat melakukan $ string = nl2br ($ string) sehingga baris Anda diubah
Dengan cara ini tidak masalah jika sistem menggunakan \ r \ n atau \ n atau \ r
Kemudian Anda bisa memasukkannya ke dalam array:
sumber
Itulah cara saya:
Ini juga akan melewati semua baris kosong juga.
sumber
array yang benar:
Sematkan Online:
sumber
Ambil ini di dokumen php:
sumber
Metode ini selalu berhasil untuk saya:
sumber
Menggunakan hanya paket 'base' juga merupakan solusi untuk kasus-kasus sederhana:
sumber
Menggunakan karakter khusus apa pun antara string atau baris
\n
dengan menggunakan PHP explode kita dapat mencapai ini.sumber