题
我有我的数据库中换行符的字符串。我想该字符串转换成一个阵列,并且对于每个新行,在阵列中跳跃一个索引位置。
如果该字符串是:
我的文本1,点击 我text2的结果 我的文字3
我想要的结果是这样的:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
解决方案
可以使用 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)
,点击
请注意,您必须使用双带引号的字符串,所以\n
实际上是解释为换行符。
结果(详见该手册页)
其他提示
我一直非常成功地使用这样的:
$array = preg_split("/\r\n|\n|\r/", $string);
(与最终\ r更新,由于@LobsterMan)
一个换行符在不同平台上有不同的定义,\ r \ N,\ R或\ n
使用正则表达式来分割字符串可以全部三个与\ r匹配
因此,对于你的问题:
$array = preg_split ('/$\R?^/m', $string);
这将在Windows,Mac和Linux匹配换行!
PHP已经知道当前系统的换行字符(多个)。只需使用EOL恒定。
explode(PHP_EOL,$string)
要一种替代戴维斯回答这是更快(方式更快)是使用str_replace
和explode
。
$arrayOfLines = explode("\n",
str_replace(array("\r\n","\n\r","\r"),"\n",$str)
);
这是怎么回事是:点击
由于换行可以有不同的形式,我str_replace
\ r \ n,\ n \ r和\ r与\ n来代替(原\ n被保留)。结果
然后在\n
爆炸,你必须在阵列的所有行。
我没有在这个页的src一个基准和在分割线1000倍的for循环和:结果
preg_replace
了11秒的平均点击
str_replace & explode
了大约1秒的平均
更多的细节和bencmark上我的论坛
大卫:大的方向,但是你错过\ r。这个工作对我来说:
$array = preg_split("/(\r\n|\n|\r)/", $string);
explode("\n", $str);
在“(而不是“)是因为否则,换行符wouln't得到解释非常重要的。
您不需要参看preg_ *函数也没有预浸图案也不内str_replace函数,等等。为了sucessfuly由换行字符串分解为阵列。在所有的情况下,无论是Linux的/ Mac还是M $,这是不行的。
<?php
$array = explode(PHP_EOL, $string);
// ...
$string = implode(PHP_EOL, $array);
?>
<强> PHP_EOL 强>是一个常数保持由服务器平台中使用的换行字符(多个)。
StackOverflow上不会允许我hesselbom的答案(没有足够的声望)发表评论,所以我将我自己...
$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);
这个工作对我来说最好的,因为它也消除主导(第二\ S *)和后(第一\ S *)空格自动并且还跳过空白线(PREG_SPLIT_NO_EMPTY标志)。
- = OPTIONS = -
如果你想保持领先的空白,根本摆脱第二\ S *,并使其成为RTRIM(),而不是...
$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);
如果您需要保留空行,摆脱空的(它只是一个占位符)和PREG_SPLIT_NO_EMPTY标志,像这样......
$array = preg_split('/\s*\R\s*/', trim($text));
或者保留两个前导空格和空行...
$array = preg_split('/\s*\R/', rtrim($text));
我看不出有任何理由,为什么你会永远想保留尾随空白,所以我建议将第一个\ S *在那里。但是,如果你想要的是新线分割(如标题所暗示的),正是这个简单的(如由Jan Goyvaerts提到的)...
$array = preg_split('/\R/', $text);
<anti-answer>
作为其他的答案已指定时,一定要使用explode
而非split
因为PHP的5.3.0 split
已弃用。即,以下是不会您想要做的方式:
$your_array = split(chr(10), $your_string);
LF = “\ n” 个= CHR(10),CR = “\ R”= CHR(13)
</anti-answer>
有关任何人试图在一个crontab显示cronjobs以及如何每一行分开感到沮丧,使用爆炸:
$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);
使用 '\ N' 似乎没有工作,但CHR(10)很好地工作:d
希望这可以节省一些一个有些头疼。
可以使用这样的:
\str_getcsv($str,PHP_EOL);
您可以做$字符串= nl2br($字符串),使您的换行符更改为
<br />.
此方式,如果系统使用没关系\ r \ n或\ n或\ r
然后,可以给它到一个数组:
$array = explode("<br />", $string);
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
foreach ($arr as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
真数组:
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
$array = array(); // inisiasi variable array in format array
foreach ($arr as $line) { // loop line by line and convert into array
$array[] = $line;
};
print_r($array); // display all value
echo $array[1]; // diplay index 1
嵌入在线:
body, html, iframe {
width: 100% ;
height: 100% ;
overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>
在php文档就捡起:
<?php
// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
?>
这个方法总是对我的作品:
$uniquepattern="gd$#%@&~#"//Any set of characters which you dont expect to be present in user input $_POST['text'] better use atleast 32 charecters.
$textarray=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['text'])));
仅使用“基础”包也是简单的情况下的解决方案:
> 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)
这是我的方式:
$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);
这也将跳过所有空行了。
使用串或换行符\n
之间的任何特殊字符使用PHP爆炸就可以达到这一点。