Как преобразовать строку из Многострочной в однострочную в 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);
источник