我有一个新的行字符字符串。我想把这个字符串转换成一个数组,对于每一个新行,在数组中跳转一个索引位置。

如果字符串是:

My text1
My text2
My text3

我想要的结果是:

Array
(
    [0] => My text1
    [1] => My text2
    [2] => My text3
)

当前回答

david的答案的另一个更快(更快)的选择是使用str_replace和爆炸。

$arrayOfLines = explode("\n",
                    str_replace(["\r\n","\n\r","\r"],"\n",$str)
            );

现在的情况是: 由于换行符可以有不同的形式,我将str_replace \r\n、\n\r和\r替换为\n(并且保留原来的\n)。 然后在\n处爆炸,你就得到了一个数组中的所有行。

我在本页的src上做了一个基准测试,并在for循环中将行分割1000次,并且: Preg_replace的平均用时为11秒 Str_replace & explosion平均耗时约1秒

更多的细节和基准信息在我的论坛

其他回答

explode("\n", $str);

"(而不是')非常重要,否则换行符不会被解释。

<anti-answer>

正如其他答案所指定的,一定要使用爆炸而不是分裂,因为从PHP 5.3.0开始,分裂已被弃用。例如,以下不是你想要的方式:

$your_array = split(chr(10), $your_string);

LF = "\n" = chr(10), CR = "\r" = chr(13)

</anti-answer>

您可以执行$string = nl2br($string),以便将换行符更改为

<br />. 

这样,系统使用\r\n或\n或\r就无关紧要了

然后你可以把它输入一个数组:

$array = explode("<br />", $string);

这个方法对我来说总是有效的:

$uniquepattern = "gd$#%@&~#" // Any set of characters which you don’t expect to be present in user input $_POST['text']. Better use at least 32 characters.
$textarray = explode($uniquepattern, str_replace("\r", "", str_replace("\n", $uniquepattern, $_POST['text'])));

我一直都很成功地使用这个方法:

$array = preg_split("/\r\n|\n|\r/", $string);

(更新为最后的\r,谢谢@LobsterMan)