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

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

Если строка:

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

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

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

Ответ 1

Вы можете использовать функцию 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 фактически интерпретируется как разрыв строки.
(подробнее см. эту страницу руководства)

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

explode(PHP_EOL,$string)

Ответ 5

Альтернатива ответу Давида, который быстрее (намного быстрее), состоит в использовании 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 секунды

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

Ответ 6

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

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

Ответ 7

explode("\n", $str);

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

Ответ 8

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

<?php 

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

?>

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

Ответ 9

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

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

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

- = OPTIONS = -

Если вы хотите сохранить ведущие пробелы, просто избавитесь от второго \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);

Ответ 10

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

Ответ 11

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

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

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

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

Ответ 12

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

 \str_getcsv($str,PHP_EOL);

Ответ 13

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

<br />. 

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

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

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

Ответ 14

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

истинный массив:

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

Ответ 15

Поднял это в документах 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);
?>

Ответ 16

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

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

Ответ 17

Использование только базового пакета также является решением для простых случаев:

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

Ответ 18

Вот мой путь:

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

Это также пропустит все пустые строки.

Ответ 19

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