我有我的数据库中换行符的字符串。我想该字符串转换成一个阵列,并且对于每个新行,在阵列中跳跃一个索引位置。

如果该字符串是:

  

我的文本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_replaceexplode

$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爆炸就可以达到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top