ファイルから読み込んだ行の値比較がうまくいかないとき

テキストファイルから行を読み込んで「$line == “港区”」のような比較に使うときは、読み込んだ行に改行が含まれていないか、注意が必要です。次のような、file関数で取得したファイルのデータを1行ずつ処理するコードはうまくいきません。

○テキストファイル(test.txt)
港区
柏市
川崎市

<?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を指定して、改行を無視して行を読み込む方法もあります。

<?php 
$data = file("test.txt"); 
  
foreach ($data as $line) { 
    if (rtrim($line) == "港区") { 
        echo "東京"; 
    } 
} 
?>

○実行結果
東京

 この例の「rtrim」は「trim」でも大丈夫です。

 この原因の他に、if文による値の比較がうまくいかないときは、次の記事を参考に比較演算子「==」と「===」の違いを考えてみてください。

【関連記事】if文による値の比較がうまくいかないとき

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク