文字列を改行で分割し、1行ずつ配列に格納する方法を紹介しています。
例えば、次のような文字列があったとします。
1行目のテキスト。
2行目のテキスト。
3行目のテキスト。
この文字列を分割して、以下のような配列を作るのが目的です。
Array
(
[0] => 1行目のテキスト。
[1] => 2行目のテキスト。
[2] => 3行目のテキスト。
)
方法としては様々ありますが、ここではexplode()
を使う方法とpreg_split()
を使う方法を紹介します。
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
を指定しない場合は、各行の最後に改行が残ったままになります。
1行目のテキスト。
2行目のテキスト。
3行目のテキスト。
input.txtは読み込むファイルです。
$input = 'input.txt';
$ary = file($input, FILE_IGNORE_NEW_LINES);
これで目的の結果が得られます。
空白行を削除する
読み込むファイルの空白行を削除することもできます。
1行目のテキスト。
2行目のテキスト。
3行目のテキスト。
上のような空白行を含むファイルがあったとします。
file()
の引数にFILE_SKIP_EMPTY_LINES
というフラグを指定すると、空白行を読み飛ばすことができます。
フラグは|
を使って複数指定することができます。
$input = 'input.txt';
$ary = file($input, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
これで目的の結果が得られます。
[prism]