Penggunaan fungsi PHP_EOL pada PHP

Penggunaan fungsi PHP_EOL pada PHP


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
)



Jawaban:


Anda dapat menggunakan explodefungsi ini, menggunakan " \n" sebagai pemisah:

$your_array = explode("\n", $your_string_from_db);

Misalnya, jika Anda memiliki kode ini:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);

Anda akan mendapatkan hasil ini:

array
  0 => string 'My text1' (length=8)
  1 => string 'My text2' (length=8)
  2 => string 'My text3' (length=8)


Perhatikan bahwa Anda harus menggunakan string yang dikutip ganda , sehingga \nsebenarnya ditafsirkan sebagai garis-istirahat.
(Lihat halaman manual itu untuk lebih jelasnya.)







Saya selalu menggunakan ini dengan sangat sukses:

$array = preg_split("/\r\n|\n|\r/", $string);

(diperbarui dengan final, terima kasih @OBsterMan)







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:

$array = preg_split ('/$\R?^/m', $string);

Itu akan cocok dengan jeda baris pada Windows, Mac dan Linux!







PHP sudah mengetahui karakter baris baru sistem saat ini. Cukup gunakan konstanta EOL.

explode(PHP_EOL,$string)





Alternatif jawaban Davids yang lebih cepat (lebih cepat) adalah dengan menggunakan str_replacedan explode.

$arrayOfLines = explode("\n",
                    str_replace(["\r\n","\n\r","\r"],"\n",$str)
            );

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_replacemengambil rata-rata 11 detik
str_replace & explodemengambil rata-rata sekitar 1 detik

Lebih detail dan info bencmark di forum saya



David: Arah yang bagus, tetapi Anda melewatkannya. ini bekerja untuk saya:

$array = preg_split("/(\r\n|\n|\r)/", $string);


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.

<?php 

 $array = explode(PHP_EOL, $string);
 // ...  
 $string = implode(PHP_EOL, $array);

?>

PHP_EOL adalah konstanta yang menahan karakter pemecah baris yang digunakan oleh platform server.







explode("\n", $str);

The "(bukannya ') cukup penting karena jika tidak, baris istirahat tidak akan ditafsirkan.


StackOverflow tidak akan memungkinkan saya untuk mengomentari jawaban hesselbom (tidak cukup reputasi), jadi saya menambahkan sendiri ...

$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);

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 ...

$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);

Jika Anda perlu menjaga baris kosong, singkirkan bendera NULL (itu hanya placeholder) dan PREG_SPLIT_NO_EMPTY, seperti begitu ...

$array = preg_split('/\s*\R\s*/', trim($text));

Atau menjaga spasi putih dan baris kosong ...

$array = preg_split('/\s*\R/', rtrim($text));

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) ...

$array = preg_split('/\R/', $text);




<anti-answer>

Seperti jawaban lain yang telah ditentukan, pastikan untuk menggunakan explodedaripada splitkarena PHP 5.3.0 splitsudah usang. yaitu yang berikut ini BUKAN cara Anda ingin melakukannya:

$your_array = split(chr(10), $your_string);

LF = "\ n" = chr (10), CR = "\ r" = chr (13)

</anti-answer>


Bagi siapa pun yang mencoba menampilkan cronjobs di crontab dan merasa frustrasi tentang cara memisahkan setiap baris, gunakan explode:

$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);

menggunakan '\ n' tampaknya tidak berfungsi tetapi chr (10) berfungsi dengan baik: D

Semoga ini menyelamatkan seseorang sakit kepala.




Anda bisa menggunakan ini:

 \str_getcsv($str,PHP_EOL);


Anda dapat melakukan $ string = nl2br ($ string) sehingga baris Anda diubah

<br />. 

Dengan cara ini tidak masalah jika sistem menggunakan \ r \ n atau \ n atau \ r

Kemudian Anda bisa memasukkannya ke dalam array:

$array = explode("<br />", $string);



Itulah cara saya:

$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);

Ini juga akan melewati semua baris kosong juga.


$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";
}

array yang benar:

$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

Sematkan Online:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>



Ambil ini di dokumen php:

<?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);
?>


Metode ini selalu berhasil untuk saya:

$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'])));



Menggunakan hanya paket 'base' juga merupakan solusi untuk kasus-kasus sederhana:

> 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)


Menggunakan karakter khusus apa pun antara string atau baris \ndengan menggunakan PHP explode kita dapat mencapai ini.