【PHP】ファイルに保存された文字列を1行ずつ配列に入れる方法

公開日:
更新日:
カテゴリー: PHP

ファイルに保存された文字列データを1行ずつ配列に格納する方法をまとめています。

この方法を活用すれば、数十行・数百行・数千行にわたってデータがまとめられているファイルを簡単に配列として扱えます。

1.テキストファイルの作成

まずは説明用に任意のテキストファイル(ここでは「sample.txt」)を作成し、1行に1データ入れます。

【sample.txt】
りんご
ばなな
みかん
いちご

2.ファイルを読み込み、配列に格納

次に、同じ階層に次のコードを記述したPHPファイルを作成します。

<?php
//ファイルのパス
$file = dirname(__FILE__) . '/sample.txt';

//配列に格納
$array = @file($file, FILE_IGNORE_NEW_LINES);

//配列のデータを出力
print_r($array);
?>

これを実行すると、次のように確かに1行の文字列データがすべて配列に格納されていることがわかります。

Array
(
    [0] => りんご
    [1] => ばなな
    [2] => みかん
    [3] => いちご
)

ポイント①file関数について

file関数はサーバー内のファイルのみならず、Web上のファイル(外部ファイル)も1行1データとして配列に格納してくれます。

@file('http://○○○.com/');

似たようなものに、file_get_contents関数がありますが、その違いは、file関数は配列としてデータを取得することです。

ポイント②改行コードの削除

上のコードでは、

@file($file, FILE_IGNORE_NEW_LINES);

となっていますが、別に

@file($file);

のみでも同じように1行1データとして配列にできます。

しかし、この場合は改行コードが含まれてしまうため「りんご\n」のような文字列データが配列に格納されます。

そのためin_array関数で「りんご」と検索してもマッチしません。

このように改行コードが不要な場合は「FILE_IGNORE_NEW_LINES」を使用して改行コードの削除を行ってください。

Tips

ファイルの存在確認を行う

上ではかなり簡単なコードを紹介しましたが、目的とするファイルが存在しなかった場合、次のようなエラーが生じます。

Warning: in_array() expects parameter 2 to be array, boolean given in ~

このエラーを回避するためには、is_file()関数でファイルの存在を確認してから処理を実行する必要があります。

<?php
//ファイルのパス
$file = dirname(__FILE__) . '/sample.txt';

//ファイルがあるか確認
if(is_file($file)){
	//配列に格納
	$array = @file($file, FILE_IGNORE_NEW_LINES);
}else{
	//ファイルがない場合
	echo "指定されたファイルがありません。";
}
?>

配列の検索を行う

ファイルのデータを配列に入れた後、in_array関数を使うとデータの検索が行えます。

<?php
//ファイルのパス
$file = dirname(__FILE__) . '/sample.txt';

//検索ワード
$word = '○○○';

//ファイルがあるか確認
if(is_file($file)){
	//配列に格納
	$array = @file($file, FILE_IGNORE_NEW_LINES);

	//配列に検索ワードがあるか検索
	if(in_array($word, $array)){
		echo 'マッチしました';
	}else{
		echo 'マッチしませんでした';
	};
}else{
	//ファイルがない場合
	echo "指定されたファイルがありません。";
}
?>

ループ処理する方法

実際の使用では配列化したあとにデータをごにょごにょしたいと思いますが、そんな場合はforeach関数でループ処理するとよいです。

<?php
//ファイルのパス
$file = dirname(__FILE__) . '/sample.txt';

//ファイルがあるか確認
if(is_file($file)){
	//配列に格納
	$array = @file($file, FILE_IGNORE_NEW_LINES);

	//ループ処理
	foreach($array as $value){
		//出力
		echo $value;
	}
	
}else{
	//ファイルがない場合
	echo "指定されたファイルがありません。";
}
?>

まとめ

今回、ファイルのデータを配列にする方法をまとめましたが、これを利用すれば配列の定義が簡略できます。

というのも、複数個のデータであれば

$array = array("ひつじ", "うま", "ねこ", "いぬ", "ライオン");

もしくは

$array = ["ひつじ", "うま", "ねこ", "いぬ", "ライオン"];

で簡単に手動定義できますが、これが50とか100以上になるとかなり面倒で保守性も落ちます(ダブルクォーテーションとかカンマを気にしながらコピペするため)。

そんなときはファイルを作成して1行1データを書き込み、それをfile関数で配列に格納すればよいです。

応用

PHPで静的な情報(ログイン情報や処理対象データなど)を扱う際、データベースとのやりとりが必要ですが、簡単な場合はわざわざデータベースを使いたくないときがあります。

そんなときはテキストファイルを簡易データベースとして扱うのがスマートです。

詳しくは、【PHP】配列、オブジェクトをファイルに保存する方法を参考にしてください。

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント