dポイントプレゼントキャンペーン実施中!

phpのin_array()でわからない事があります。

$str = array('リンゴ','オレンジ','バナナ');
if(in_array("オレンジ",$str)){
print "OK";
}else{
print "NG";
}
結果:OK

上記は何の問題もないのですが、

$str = @file('hoge.txt');
if(in_array("オレンジ",$str)){
print "OK";
}else{
print "NG";
}
結果:NG

// hoge.txt
リンゴ
オレンジ
バナナ


こうするとNGになってしまいます。

最近PHPを始めたばかりで根本的な事がわかってないのかも知れませんが、
もし原因をご存じの方がいれば教えていただけないでしょうか。

すみませんがよろしくお願いいたします。

A 回答 (2件)

可能性としては2つ



ひとつは改行文字の問題
http://www.php.net/manual/ja/function.file.php
var_dump($str);
してみるとわかりますが、バイト数が想定より大きくなっているようなら改行文字が
入っています。
基本的にはFILE_IGNORE_NEW_LINESを指定すると解決します。

もうひとつは文字コードの問題、
テキストファイルとプログラムファイルの文字コードが一致しないと話になりません。

また、fileでやるよりもう少し厳密にfopenしてfreadして・・・という
プログラム的なI/Oを心がけた方がミスがへります
    • good
    • 0

file 関数はデフォルトでは改行コードを含むのが原因です。



$str = @file('hoge.txt', FILE_IGNORE_NEW_LINES);

とするといいと思います。

参考URL:http://php.net/manual/ja/function.file.php
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!