テキストファイルから行を読み込んで「$line == “港区”」のような比較に使うときは、読み込んだ行に改行が含まれていないか、注意が必要です。次のような、file関数で取得したファイルのデータを1行ずつ処理するコードはうまくいきません。
○テキストファイル(test.txt)
港区
柏市
川崎市
1 2 3 4 5 6 7 8 9 | <?php $data = file( "test.txt" ); foreach ( $data as $line ) { if ( $line == "港区" ) { echo "東京" ; } } ?> |
この場合、ファイルから取得した行をそのまま値比較に使うのではなく、「rtrim($line)」として改行文字を削除した値と比較するなど、注意しましょう。
または、file関数の2番目のパラメータに「file(“test.txt”, FILE_IGNORE_NEW_LINES)」のようにFILE_IGNORE_NEW_LINESを指定して、改行を無視して行を読み込む方法もあります。
1 2 3 4 5 6 7 8 9 | <?php $data = file( "test.txt" ); foreach ( $data as $line ) { if (rtrim( $line ) == "港区" ) { echo "東京" ; } } ?> |
○実行結果
東京
この例の「rtrim」は「trim」でも大丈夫です。
この原因の他に、if文による値の比較がうまくいかないときは、次の記事を参考に比較演算子「==」と「===」の違いを考えてみてください。
【関連記事】if文による値の比較がうまくいかないとき