Как преобразовать строку из многострочного в однострочный в PHP? - PullRequest
9 голосов
/ 09 ноября 2009

Существует ли строковая функция PHP, которая преобразует многострочную строку в однострочную?

Я получаю некоторые данные от API, который содержит несколько строк. Например:

<p>Some Data</p>

<p>Some more Data</p>

<p>Even More Data</p>

Я назначаю эти данные переменной, а затем отображаю переменную как часть / «ячейка» документа CSV.

Это ломает мой CSV-документ. Вместо всего содержимого, отображаемого в одной ячейке (при просмотре в OpenOffice Calc), оно отображается в нескольких ячейках и строках. Он должен содержаться в одной клетке.

Я хотел бы преобразовать строку в:

<p>Some Data</p><p>Some more Data</p><p>Even More Data<p>

Или, как лучше это исправить?

Ответы [ 5 ]

30 голосов
/ 09 ноября 2009

Методы преобразования строк

Подход 1

Для удаления всего ненужного между закрывающими и открывающими тегами

...

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

$str = preg_replace("/(\/[^>]*>)([^<]*)(<)/","\\1\\3",$str);

Он будет чередовать что угодно между тегами p, например, новые строки, пробелы или любой текст.

Подход 2

И снова с подходом «только разрывы строк и новые строки»

$str = preg_replace("/[\r\n]*/","",$str);

Подход 3

Или с несколько более быстрым, но негибким подходом с простой заменой строк

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

Выберите!

Сравнение

Давайте сравним мои методы

Производительность

Производительность всегда относительно самого быстрого подхода вв этом случае второй.

(чем ниже, тем лучше)

Approach 1   111
Approach 2   300
Approach 3   100

Результат

Подход 1
Разбивает все между тегами

Подход 2 и 3
Удаляет символы новой строки и переноса строки

5 голосов
/ 09 ноября 2009

Это удалит только разрывы строк, вы, очевидно, не хотите удалять пробелы, так как это будет применяться к строке внутри тегов абзаца.

$str = str_replace(array("\n", "\r"), '', $str);
2 голосов
/ 02 мая 2011

Лучший метод, который я нашел для создания многострочной строки, состоящей из одной строки, был следующим:

$newstring = str_replace(array("\r\n", "\n", "\r"), '', $oldstring);

Это похоже на другие ответы, но добавляет "\ r \ n", который должен быть начальной частью массива, чтобы оно не удваивалось.

1 голос
/ 09 ноября 2009

Вам просто нужно удалить все символы новой строки (\ n) и возврата каретки (\ r) из строки. В PHP это так просто, как:

$string = str_replace(array("\n", "\r"), '', $string);
0 голосов
/ 24 июля 2014

только в том случае, если никто не мог найти ответ в ответах выше, нашел этот:

$ newVariabe = preg_replace ('/ \ s + /', '_', $ oldVariable);

источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...