我的数据库中有一个带换行符的字符串。我想将该字符串转换为数组,对于每一行,在数组中跳一个索引位置。
如果字符串是:
我的文字1我的文字2我的文字3
我想要的结果是这样:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
您可以使用explode
功能,使用“ explode
”作为分隔符:
\n
例如,如果您有这段代码:
$your_array = explode("\n", $your_string_from_db);
您将获得此输出:
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);
请注意,您必须使用array
0 => string 'My text1' (length=8)
1 => string 'My text2' (length=8)
2 => string 'My text3' (length=8)
,因此double-quoted string实际上被解释为换行符。((有关更多详细信息,请参见该手册。)
$array = preg_split('/\R/', $text);
对于试图在crontab中显示cronjobs并对如何分隔每一行感到沮丧的人,请使用explode:
您可以使用此:
您可以执行$ string = nl2br($ string),以便将换行符更改为
$array = explode("<br />", $string);
在php文档中选择了此:
这是我的方式:
此方法始终对我有用:
仅使用'base'软件包也是简单情况的解决方案:
使用PHP爆炸在字符串或换行符> s <- "a\nb\rc\r\nd"
> l <- strsplit(s,"\r\n|\n|\r")
> l # the whole list...
[[1]]
[1] "a" "b" "c" "d"
> l[[1]][1] # ... or individual elements
[1] "a"
> l[[1]][2]
[1] "b"
> fun <- function(x) c('Line content:', x) # handle as you wish
> lapply(unlist(l), fun)
之间使用任何特殊字符,我们都可以实现。
我一直很成功地使用它:
\n
(用最后的\ r更新,谢谢@LobsterMan)
换行符在\ r \ n,\ r或\ n的不同平台上的定义不同。
使用RegExp分割可以用\ R匹配所有三个字符串
因此遇到您的问题:
$array = preg_split("/\r\n|\n|\r/", $string);
这将与Windows,Mac和Linux上的换行符匹配!
PHP已经知道当前系统的换行符。只需使用EOL常量即可。
$array = preg_split ('/$\R?^/m', $string);
explode(PHP_EOL,$string)
的更快(更快)的替代方法是使用Davids answer和str_replace
。
explode
发生了什么事:由于换行符可以采用不同的形式,因此我将$arrayOfLines = explode("\n",
str_replace(array("\r\n","\n\r","\r"),"\n",$str)
);
\ r \ n,\ n \ r和\ r替换为\ n(并保留了原始\ n)。然后在str_replace
上爆炸,您将所有行放在一个数组中。
我在此页面的src上进行了基准测试,并在for循环中将行拆分了1000次,并且:\n
平均花了11秒preg_replace
平均约1秒
str_replace & explode
的更多详细信息和本标志信息>
David:好的方向,但您错过了\ r。这对我有用:
您不需要preg_ *函数,preg模式或内部的str_replace等,以便通过换行符将字符串成功地分成数组。在所有情况下,无论是Linux / Mac还是m $,都可以。
<?php
$array = explode(PHP_EOL, $string);
// ...
$string = implode(PHP_EOL, $array);
?>
StackOverflow不允许我对hesselbom的答案发表评论(声誉不高,所以我要添加自己的...]
explode("\n", $str);