2016-08-09

file関数で配列に格納される要素を同じ文字列と比較すると一致しない

はじめに

PHPであるプログラムを作成している際に、file関数を使用してテキスト内に記述されているURLを配列として格納した後、まったく同じURLの文字列を格納した変数と比較してみたところ、なぜか一致しない、という現象に少し悩まされたのでメモしておきます。

問題点

問題のソースが以下の通り。

PHPと表示結果

file関数にURLが記述されたテキストファイル「urls.txt」を読み込ませると、結果にある通り、中に記述されたURLが配列として$resultに格納されるのですが、このとき、配列に格納されたURLの末尾に半角スペースが混入してしまい、ベタ書きしたURLと比較しても同一とみなされません。

ここでふと、ベタ書きしたURLの末尾にも半角スペースを入れれば同じになるんじゃないか?と思い、半角スペースを入れてもう一度比較してみましたが、全く一緒のはずなのに、if文の判定では別物となってしまいました。さらに詳細に出力してみたところ、以下のように、型も見た目も一緒ですが文字数が違うという判定に。

PHPと表示結果

解決方法

これらの結果の原因として、file関数の仕組みに問題がありました。file関数では、デフォルトでは配列の末尾に改行文字列が付与されるため、このような差が生じるようです。対策として、file関数のオプションに「FILE_IGNORE_NEW_LINES」を記述することで改行文字列が付与されなくなり、配列内のURLとベタ書きのURLが同一のものとみなされるようになります。

PHPと表示結果

さいごに

ちょっと調べればすぐ答えが出てくる問題ですが、私のように関数による仕様であると分からないと少々躓く・・・かもしれません。



コメントする(※は必須項目です)













画像認証