Как поместить строку в массив, разделить на новую строку?

У меня есть строка с разрывами строк в моей базе данных. Я хочу преобразовать эту строку в массив, и для каждой новой строки скачу одно место индекса в массиве.

Если строка:

Мой текст1
Мой текст2
Мой текст3

В результате я хочу:

Array ( [0] => My text1 [1] => My text2 [2] => My text3 ) 

Вы можете использовать функцию explode , используя « \n » в качестве разделителя:

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

Например, если у вас есть этот фрагмент кода:

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

Вы получите этот результат:

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

Обратите внимание, что вам нужно использовать строку с двумя кавычками , поэтому \n на самом деле интерпретируется как разрыв строки.
(подробности см. на странице руководства)

Разрыв строки определяется по-разному на разных платформах: \ r \ n, \ r или \ n.

Используя RegExp для разделения строки, вы можете сопоставить все три с помощью \ R

Итак, для вашей проблемы:

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

Это будет соответствовать разрыву строк в Windows, Mac и Linux!

Я всегда пользовался этим с большим успехом:

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

(обновлено с окончательным \ r, спасибо @LobsterMan)

PHP уже знает символы новой строки текущей системы. Просто используйте константу EOL.

 explode(PHP_EOL,$string) 

Альтернатива ответам Дэвидса, которая быстрее (быстрее) – использовать str_replace и explode .

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

Что происходит:
Так как разрывы строк могут быть в разных формах, я str_replace \ r \ n, \ n \ r и \ r вместо \ n (и исходные \ n сохранены).
Затем взорвется на \n и у вас есть все строки в массиве.

Я сделал тест на src этой страницы и разделил строки 1000 раз в цикле for и:
preg_replace занимает средние 11 секунд
str_replace & explode занимает около 1 секунды

Более подробная информация и информация о bencmark на моем форуме

Дэвид: Отличное направление, но ты пропустил. это сработало для меня:

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

Вам не нужны функции preg_ *, а также шаблоны preg, а также str_replace внутри и т. Д., Чтобы sucessfuly разбивать строку на массив по символам новой строки. Во всех сценариях, будь то Linux / Mac или m $, это будет сделано.

 <?php $array = explode(PHP_EOL, $string); // ... $string = implode(PHP_EOL, $array); ?> 

PHP_EOL – это константа, содержащая символ (ы) разрыва строки, используемый серверной платформой.

 explode("\n", $str); 

«(Вместо») очень важно, так как в противном случае разрыв строки не интерпретируется.

 <anti-answer> 

Как указывали другие ответы, обязательно используйте explode а не split поскольку с PHP 5.3.0 split устарел. т. е. НЕ является тем, как вы хотите это сделать:

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

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

 </anti-answer> 

StackOverflow не позволит мне комментировать ответ hesselbom (недостаточно репутации), поэтому я добавляю свои собственные …

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

Это работало лучше всего для меня, потому что оно также автоматически удаляет ведущие (второй \ s *) и конечный (первый \ s *) пробелы, а также пропускает пустые строки (флаг PREG_SPLIT_NO_EMPTY).

– = ОПЦИИ = –

Если вы хотите сохранить ведущие пробелы, просто избавитесь от второго \ s * и сделайте его rtrim () вместо этого …

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

Если вам нужно сохранить пустые строки, избавьтесь от NULL (это только заполнитель) и флаг PREG_SPLIT_NO_EMPTY, вот так …

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

Или сохранить как ведущие пробелы, так и пустые строки …

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

Я не вижу причин, по которым вам когда-либо хотелось бы сохранить конечные пробелы, поэтому я предлагаю оставить там первый \ s *. Но если все, что вам нужно, – это разделить по новой строке (как следует из названия), это ЭТО просто (как упоминал Ян Гойвартс) …

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

Для тех, кто пытается отобразить cronjobs в crontab и разочаровывается в том, как разделить каждую строку, используйте explode:

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

использование '\ n' не работает, но chr (10) работает красиво: D

надеюсь, это избавит некоторых от некоторых головных болей.

вы можете использовать это:

  \str_getcsv($str,PHP_EOL); 

Вы можете сделать $ string = nl2br ($ string), чтобы ваш разрыв строки был изменен на

 <br />. 

Таким образом, не имеет значения, использует ли система \ r \ n или \ n или \ r

Затем вы можете подать его в массив:

 $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 

Вставить видео:

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

Этот метод всегда работает для меня:

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

Используя любой специальный символ между строкой или разрывом строки \n используя PHP explode, мы можем добиться этого.