データベースに改行を含む文字列があります。その文字列を配列に変換し、新しい行ごとに配列内のインデックス位置を1つジャンプします。
文字列が
私のテキスト1
私のテキスト2
私のテキスト3
私が欲しい結果はこれです:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
区切り文字として "\n
"を使用して、 explode
関数を使用できます。
$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。
RegExpを使用して文字列を分割すると、3つすべてを\ Rで一致させることができます。
だからあなたの問題のために:
$array = preg_split ('/$\R?^/m', $string);
それは、Windows、Mac、Linuxでの改行と一致します。
PHPは現在のシステムの改行文字を既に知っています。 EOL定数を使うだけです。
explode(PHP_EOL,$string)
Davids answer よりも速い(はるかに速い)の代替は、str_replace
とexplode
を使用することです。
$arrayOfLines = explode("\n",
str_replace(array("\r\n","\n\r","\r"),"\n",$str)
);
何が起こっているのですか:
改行はさまざまな形式で表示される可能性があるため、代わりに\ nを使用して_ str_replace
\r\n、\ n\r、および\ rとします(元の\ nは保持されます)。
それから\n
を爆発させると、すべての行が配列になります。
このページのsrcでベンチマークを行い、forループで行を1000回分割しました。preg_replace
の平均時間は11秒でしたstr_replace & explode
の平均時間は約1秒です
私のフォーラム に関する詳細およびベンチマーク情報
David:素晴らしい方向だが、逃した。これは私のために働いた:
$array = preg_split("/(\r\n|\n|\r)/", $string);
改行で文字列を配列に分割するために、preg_ *関数、pregパターン、str_replaceなどは必要ありません。すべてのシナリオで、それがLinux/Macまたはm $であろうと、これはうまくいくでしょう。
<?php
$array = explode(PHP_EOL, $string);
// ...
$string = implode(PHP_EOL, $array);
?>
PHP_EOLはサーバプラットフォームで使用される改行文字を保持する定数です。
explode("\n", $str);
「(の代わりに)は、そうでなければ改行が解釈されないので非常に重要です。
<anti-answer>
他の回答でも指定されているように、PHP 5.3.0以降のexplode
は推奨されないため、split
ではなくsplit
を必ず使用してください。つまり、次はNOTあなたがやりたいやり方です:
$your_array = split(chr(10), $your_string);
LF = "\ n" = chr(10)、CR = "\ r" = chr(13)
</anti-answer>
StackOverflowは私がhesselbomの答えについてコメントすることを可能にしないでしょう(十分でない評判)、それで私は私自身を追加しています...
$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);
先頭(2番目の\ s *)と末尾(1番目の\ s *)の空白も自動的に削除され、空白行もスキップされるので(PREG_SPLIT_NO_EMPTYフラグ)、これは私には最適です。
- =オプション= -
先頭の空白を残したい場合は、2番目の\ 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 *をそこに残すことをお勧めします。しかし、あなたが望むすべてが(タイトルが示唆するように)新しい行で分割することであるならば、それは(Jan Goyvaertsによって言及されるように)これは単純です...
$array = preg_split('/\R/', $text);
Crontabにcronjobを表示しようとしていて各行を分ける方法にいらいらしている人は、explodeを使用してください。
$output = Shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);
'\ n'を使ってもうまくいかないようですが、chr(10)はうまく動作します:D
これで頭痛が解消されることを願っています。
改行がに変更されるように$ string = nl2br($ string)を実行できます。
<br />.
この方法では、システムが\ r\nを使用しても\ nまたは\ rを使用しても問題ありません。
それからそれを配列に入れることができます。
$array = explode("<br />", $string);
あなたはこれを使用することができます:
\str_getcsv($str,PHP_EOL);
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);
?>
$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>
'base'パッケージのみを使用することも簡単な場合の解決策です。
> 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)
この方法はいつも私のために働きます:
$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'])));
それが私のやり方だ:
$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);
これもすべての空行をスキップします。