【PHP】文字列を改行で分割し、1行ずつ配列に格納する方法

PHPで文字列を1行ずつ配列に格納する

文字列を改行で分割し、1行ずつ配列に格納する方法を紹介しています。

例えば、次のような文字列があったとします。

1行目のテキスト。
2行目のテキスト。
3行目のテキスト。

この文字列を分割して、以下のような配列を作るのが目的です。

Array
(
	[0] => 1行目のテキスト。
	[1] => 2行目のテキスト。
	[2] => 3行目のテキスト。
)

方法としては様々ありますが、ここではexplode()を使う方法とpreg_split()を使う方法を紹介します。

注意
OSによって改行コードが違います。複数の環境に対応するためには、それらの改行コードに対応する必要があります。

explode()を使う方法

PHPには文字列を文字列で分割する関数としてexplode()が用意されています。

この関数の引数に改行コード"\n"を渡せば簡単にできそうですが、上でも述べたようにOSにより改行コードが異なるので少し注意が必要です。

改行コードには以下のような種類があります。

改行コード

  • "\r\n"
  • "\r"
  • "\n"

これらの改行コードをstr_replace()を使って、"\n"に置き換えてからexplode()で分割すると上手くいきます。

$str = "1行目のテキスト。\n2行目のテキスト。\n3行目のテキスト。";

$str = str_replace(array("\r\n","\r"), "\n", $str);
$ary = explode("\n", $str);

preg_split()を使う方法

PHPには正規表現で文字列を分割する関数としてpreg_split()が用意されています。

この関数を使えば一発で目的の処理ができます。

$str = "1行目のテキスト。\n2行目のテキスト。\n3行目のテキスト。";

$ary = preg_split("/\r\n|\r|\n/", $str);

上で紹介したexplode()を使う方法よりも、preg_split()を使った方がスマートに見えますね。ですが実行速度はexplode()の方が早いでしょう。

ファイルから読み込む場合

ファイルから読み込む場合には、explode()preg_split()を使わなくても1行ずつ配列に格納することができます。

PHPにはファイルを読み込んで配列に格納するfile()が用意されています。

この関数の引数にFILE_IGNORE_NEW_LINESというフラグを指定すると、各行の最後の改行を削除できます。

FILE_IGNORE_NEW_LINESを指定しない場合は、各行の最後に改行が残ったままになります。

input.txt
1行目のテキスト。
2行目のテキスト。
3行目のテキスト。

input.txtは読み込むファイルです。

PHP
$input = 'input.txt';
$ary = file($input, FILE_IGNORE_NEW_LINES);

これで目的の結果が得られます。

空白行を削除する

読み込むファイルの空白行を削除することもできます。

input.txt
1行目のテキスト。

2行目のテキスト。

3行目のテキスト。

上のような空白行を含むファイルがあったとします。

file()の引数にFILE_SKIP_EMPTY_LINESというフラグを指定すると、空白行を読み飛ばすことができます。

フラグは|を使って複数指定することができます。

PHP
$input = 'input.txt';
$ary = file($input, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

これで目的の結果が得られます。

[prism]