Как преобразовать строку из Многострочной в однострочную в PHP?

есть ли строковая функция 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 ответов


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

подход 1

чтобы удалить все ненужное между закрытием и открытием ...теги

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

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

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

подход 2

и снова с delete-only-linebreaks-and-newlines подходи!--9-->

$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
Полосы newline и linebreak символов


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

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

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

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

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


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

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

просто incase никто не мог найти ответ в приведенных выше ответах, нашел этот:

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

источник