У меня есть строка с разрывами строк в моей базе данных. Я хочу преобразовать эту строку в массив, и для каждой новой строки переходить на одно место индекса в массиве.
Если строка:
My text1
My text2
My text3
В результате я хочу это:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
источник
источник
s($yourString)->normalizeLineEndings()
доступен с github.com/delight-im/PHP-Str (библиотека под лицензией MIT), в которой есть много других полезных помощников строк. Возможно, вы захотите взглянуть на исходный код.Ответы:
Вы можете использовать
explode
функцию, используя "\n
" в качестве разделителя:Например, если у вас есть этот кусок кода:
Вы получите этот вывод:
Обратите внимание, что вы должны использовать строку в двойных кавычках , поэтому
\n
фактически интерпретируется как разрыв строки.(См. Эту страницу руководства для более подробной информации.)
источник
\n
вы можете использовать предопределенную константуPHP_EOL
.PHP_EOL
. Вы должны использоватьpreg_split("/\\r\\n|\\r|\\n/", $value)
.Я всегда использовал это с большим успехом:
(дополнено финальной версией, спасибо @LobsterMan)
источник
\R
матчей\n
,\r
и\r\n
/\r?\n/
Разрыв строки определяется по-разному на разных платформах, \ r \ n, \ r или \ n.
Используя RegExp для разделения строки, вы можете сопоставить все три с \ R
Итак, для вашей проблемы:
Это будет соответствовать разрывам строк в Windows, Mac и Linux!
источник
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
лучший выборPHP уже знает символы новой строки текущей системы. Просто используйте константу EOL.
источник
trim()
полученные строки для удаления любых посторонних пробелов.Альтернативой ответу Дэвидса, который быстрее (намного быстрее), является использование
str_replace
иexplode
.Происходит следующее:
Так как разрывы строк могут иметь различную форму,
str_replace
вместо этого I \ r \ n, \ n \ r и \ r с \ n (и оригинальные \ n сохраняются).Затем взорвитесь,
\n
и вы получите все строки в массиве.Я сделал бенчмарк на src этой страницы и разделил строки 1000 раз в цикле for и:
preg_replace
занял среднее значение 11 секундstr_replace & explode
занял среднее значение около 1 секундыБолее подробная информация и информация о тесте на моем форумеисточник
Дэвид: Отличное направление, но ты пропустил. это сработало для меня:
источник
Вам не нужны ни preg_ * -функции, ни preg-шаблоны, ни str_replace внутри и т. Д., Чтобы успешно разбить строку на массив с помощью новых строк. Во всех сценариях, будь то Linux / Mac или m $, это подойдет.
источник
«(Вместо») очень важно, так как в противном случае разрыв строки не будет интерпретирован.
источник
StackOverflow не позволит мне комментировать ответ Хессельбома (недостаточно репутации), поэтому я добавляю свой собственный ...
Это лучше всего сработало для меня, потому что оно также автоматически исключает начальные (второй \ s *) и конечные (первые \ s *) пробелы, а также пропускает пустые строки (флаг PREG_SPLIT_NO_EMPTY).
- = ОПЦИИ = -
Если вы хотите сохранить начальные пробелы, просто избавьтесь от второго \ s * и сделайте вместо него rtrim () ...
Если вам нужно сохранить пустые строки, избавьтесь от NULL (это только заполнитель) и флага PREG_SPLIT_NO_EMPTY, вот так ...
Или сохранить как ведущие пробелы, так и пустые строки ...
Я не вижу причин, по которым вы когда-нибудь захотите оставить пробелы, поэтому я предлагаю оставить первые \ s * там. Но, если все, что вам нужно, это разделить на новую строку (как следует из названия), это НАСТОЛЬКО просто (как упомянул Ян Гойваертс) ...
источник
m
Модификатор действительно не нужен он? Разве это не влияет только на^
и$
?Как указали другие ответы, обязательно используйте,
explode
а неsplit
потому, что с PHP 5.3.0split
устарела. то есть следующее НЕ так, как вы хотите это сделать:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
источник
Для тех, кто пытается отобразить cronjobs в crontab и разочарован тем, как разделить каждую строку, используйте explode:
использование '\ n', похоже, не работает, но chr (10) работает хорошо: D
надеюсь, это спасет кого-то от головной боли.
источник
'\n'
не работает, потому что escape-последовательности не интерпретируются в одинарных кавычках, вместо"\n"
этого вам нужно использовать двойные кавычки: вместо'n'
Read php.net/manual/en/language.types.string.phpВы можете использовать это:
источник
Вы можете сделать $ string = nl2br ($ string), чтобы ваш перевод строки был изменен на
Таким образом, не имеет значения, использует ли система \ r \ n или \ n или \ r
Затем вы можете передать его в массив:
источник
Это мой путь:
Это также пропустит все пустые строки.
источник
истинный массив:
Вставить онлайн:
источник
Поднял это в документах php:
источник
Этот метод всегда работает для меня:
источник
Использование только базового пакета также является решением для простых случаев:
источник
Используя любой специальный символ между строкой или разрывом строки,
\n
используя PHP разнесение, мы можем достичь этого.источник