文字列を配列に入れて改行で分割するにはどうすればよいですか?
-
18-09-2019 - |
質問
データベースに改行のある文字列があります。その文字列を配列に変換し、新しい行ごとに配列内のインデックス位置を 1 つずつジャンプしたいと考えています。
文字列が次の場合:
私のテキスト1
私のテキスト2
私のテキスト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
との3つのすべてを一致させることができます文字列を分割するために正規表現を使用しましただからあなたの問題のために:
$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)
);
何が起こっていることは次のとおりです。
改行は異なる形で来ることができるので、私は、\ n個の代わりにRの\ nを\ n個の\ rを、および\ rを\ str_replace
(および元\ nが保存されている)。
その後\n
に爆発するとあなたは、アレイ内のすべての行を持っています。
私はこのページのSRCのベンチマークを行なったし、ループのためにライン1000回を分割:
preg_replace
は、11秒の平均を取った
str_replace & explode
は約1秒の平均を取った。
より詳細かつ私のフォーラム
デビッド:グレート方向が、あなたは、\ rのを逃しました。これは私のために働いてます:
$array = preg_split("/(\r\n|\n|\r)/", $string);
explode("\n", $str);
」(代わりに「が)それ以外の場合は、改行が解釈しますwouln'tとして非常に重要である。
preg_* 関数も preg パターンも str_replace inside なども必要ありません。文字列を改行で配列に正常に分割するには。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);
それはまた、主要な排除ので、これは私にとって最高の働いていた(第2 \がs *)および末尾の空白は自動的にも空白行(PREG_SPLIT_NO_EMPTYフラグ)。
をスキップします(最初の\は、* S)- = OPTIONS = -
あなたは先頭の空白を維持したい場合は、単に二\ sの*を取り除くと、それRTRIM(作ります)の代わりに...
$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);
あなたは空行を維持する必要がある場合は、NULLを取り除く(それが唯一のプレースホルダである)とPREG_SPLIT_NO_EMPTYフラグ、そのような...
$array = preg_split('/\s*\R\s*/', trim($text));
または両方先頭の空白や空行を保つ...
$array = preg_split('/\s*\R/', rtrim($text));
あなたは末尾の空白を維持したいと思いますなぜ私はいかなる理由が表示されていないので、私はそこに最初の\ sの*を残すことをお勧めします。あなたが望むすべてが新しい行(タイトルが示すように)によって分割する場合しかし、それは(月Goyvaertsで述べたように)この単純です...
$array = preg_split('/\R/', $text);
<anti-answer>
他の回答が指定されているとおり、PHPのよう5.3.0 explode
が推奨されていませんので、むしろsplit
よりもsplit
を使用してください。すなわち、以下である にしないで、あなたがそれをやりたい道ます:
$your_array = split(chr(10), $your_string);
LF = "\ n" = CHR(10)、CR = "\のR" = CHR(13)
</anti-answer>
誰がcrontabファイルにcronジョブを表示しようとすると爆発し、各行を区切る使用方法に不満を取得します。
$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);
を使用して '\ n' が動作するようには思えdoesntのが、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);
これは、あまりにもすべての空行をスキップします。
PHPを使用して文字列または行ブレーク\n
間のいずれかの特殊文字を使用して、我々はこれを達成することができます爆発します。