2012-01-06 2 views
1

私は、txtファイルを読み込んで内容を配列に入れる非常に簡単なスクリプトを持っています。PHP in_array()は配列内にあるコンテンツを見つけられません

これは完全に私ができることですprint_r($array);すべてのデータを出力します。

マイスクリプト:

<?php 

$file = 'countries.txt'; 
$countries_output = file_get_contents($file); 

$countries_pieces = explode("\n", $countries_output); 

if (in_array("Sweden", $countries_pieces)) { 
    echo "Sweden was found"; 
} 
else 
{ 
echo'NOT FOUND'; 
} 
print_r($countries_pieces); 
?> 

それは明らかに存在しているとき、それは、私の配列に値「スウェーデン」を見つけることができなかった理由を私は理解していません。

これが出力されます:https://pastebin.com/z9rC9Qvk

あなたは「スウェーデン」は、配列に実際にあることがわかりますので、私はまた、配列をしますprint_r。

ホープ誰かが助けることができます:)あなたは考慮していない可能性が高い改行文字

答えて

1

Windowsマシンのcountries.txtですか?もしそうなら、 '\ n'で分割することはうまくいきません。なぜなら、すべての行に '\ r'もあるからです。

あなたのprint_r出力は、すべての出力行の間に余分な改行があるように思われるようです。

9

があります。次はfile()を使用してクリーンなソリューションであり、あなたのために働く必要があります。

$file = 'countries.txt'; 
$countries_pieces = file($file, FILE_IGNORE_NEW_LINES); 

if (in_array("Sweden", $countries_pieces)) { 
    echo "Sweden was found"; 
} else { 
    echo'NOT FOUND'; 
} 

いくつかの問題が残っている場合は、一般的な正規化は、いくつかの左オーバーを削除するtrim()値にある:

$countries_pieces = array_map('trim', $countries_pieces); 

しかし、これはすべての問題を治してはならない。

+0

恐ろしく!あなたは揺れる。 –

+0

うん - おそらくまだそこに\ r、またはいくつかの他の奇妙なことがあります。 –

+0

@Godius:答えがあなたの問題を解決した場合は、質問を回答としてマークすることを忘れないでください。 –