如何在PHP中将字符串从多行转换为单行?

时间:2009-11-09 14:33:21

标签: php string csv

是否有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>

或者,最好的解决办法是什么?

6 个答案:

答案 0 :(得分:30)

线路转换技术

方法1

删除结束和开始之间不必要的任何内容&lt; / p&gt; ...&lt; p&gt;您可以使用正则表达式的标签。我还没有清理它,所以它只是供参考。

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

它将剥离p标记之间的任何内容,例如换行符,空格或任何文本。

方法2

再次使用delete-only-linebreaks-and-newlines方法

$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
剥离换行符和换行符

答案 1 :(得分:4)

这将仅删除换行符,您显然不想删除空格,因为这会应用于段落标记中的字符串。

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

答案 2 :(得分:2)

我发现将多行字符串组成一行的最佳方法就像这样

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

这与其他答案类似,但添加了“\ r \ n”,它必须是数组的初始部分, 所以它不会加倍。

答案 3 :(得分:1)

您只需要从字符串中删除所有新行(\ n)和回车符(\ r \ n)。在PHP中,这很简单:

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

答案 4 :(得分:0)

只是因为任何人都无法在上面的答案中找到答案,发现了这个:

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

source

答案 5 :(得分:0)

只有一行而不是多行,并在文本之间保留一个制表符和空格。

$text="
test1
                                               
                test2


                                     tets4

                                     
                        test5
             test6                   test8                           test9
test10
";

$lines = explode("\r\n", $text);
$data="";
foreach($lines as $line)
{
    if($line=="")
    {
        $isline=1;
    }
    else
        $isline=0;

    if($isline==0 && $line!="")
    {
        $data.=$line."\n";
    }   
}