データベースに改行のある文字列があります。その文字列を配列に変換し、新しい行ごとに、配列内の1つのインデックス位置にジャンプします。
文字列が次の場合:
My text1
My text2
My text3
私が欲しい結果はこれです:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
データベースに改行のある文字列があります。その文字列を配列に変換し、新しい行ごとに、配列内の1つのインデックス位置にジャンプします。
文字列が次の場合:
My text1
My text2
My text3
私が欲しい結果はこれです:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
私はいつもこれを使って大成功を収めてきました:
$array = preg_split("/\r\n|\n|\r/", $string);
(最後の \r で更新、@LobsterMan に感謝)
区切り文字として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
実際には改行として解釈される
ことに注意してください。
(詳細については、そのマニュアルページを参照してください。)
改行は、\r\n、\r、または \n のように、プラットフォームごとに異なる方法で定義されます。
RegExp を使用して文字列を分割すると、3 つすべてを \R で一致させることができます
だからあなたの問題のために:
$array = preg_split ('/$\R?^/m', $string);
これは、Windows、Mac、および Linux の改行と一致します。
PHP は、現在のシステムの改行文字を既に認識しています。EOL 定数を使用するだけです。
explode(PHP_EOL,$string)
デビッドは素晴らしい方向性を持っていますが、\rを逃しました。これは私のために働いた:
$array = preg_split("/(\r\n|\n|\r)/", $string);
改行によって文字列を配列に正常に分割するために、 preg_* 関数、 pregパターン、str_replaceなどは必要ありません。Linux、Mac、Windows のいずれのシナリオでも、これで十分です。
<?php
$array = explode(PHP_EOL, $string);
// ...
$string = implode(PHP_EOL, $array);
?>
PHP_EOLは、サーバー プラットフォームで使用される改行文字を保持する定数です。
explode("\n", $str);
('の代わりに) "は非常に重要です。そうでない場合、改行は解釈されません。
<anti-answer>
As other answers have specified, be sure to use explode
rather than split
because as of PHP 5.3.0 split
is deprecated. i.e. the following is NOT the way you want to do it:
$your_array = split(chr(10), $your_string);
LF = "\n" = chr(10), CR = "\r" = chr(13)
</anti-answer>
crontab で cron ジョブを表示しようとしていて、各行を区切る方法に不満を感じている人は、explode を使用してください。
$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);
'\n' の使用は機能していないようですが、chr(10) はうまく機能します:D
これが誰かの頭痛の種を救うことを願っています。
これを使用できます:
\str_getcsv($str, PHP_EOL);
$string = nl2br($string) を実行して、改行を次のように変更できます
<br />.
このように、システムが \r\n または \n または \r を使用するかどうかは問題ではありません
次に、それを配列にフィードできます。
$array = explode("<br />", $string);
この方法は常に私にとってうまくいきます:
$uniquepattern = "gd$#%@&~#" // Any set of characters which you don’t expect to be present in user input $_POST['text']. Better use at least 32 characters.
$textarray = explode($uniquepattern, str_replace("\r", "", str_replace("\n", $uniquepattern, $_POST['text'])));