2012-07-16 23 views
6

in_array()を使用すると、PHPは常にfalseを返し、配列内にあるかどうかは関係ありません。たとえば、次のようにPHP in_array()は常にfalseを返します

$list = 'test 
list 
example'; 
$list_arr = array(); 
$list_arr = explode("\n",$list); 
if (in_array('test',$list_arr)) { 
    echo 'Found'; 
} 
else { 
    echo 'Not Found'; 
} 

返し、それはなぜそれが

を返す必要があるとして、「テスト」は

$list = 'test 
list 
example'; 
$list_arr = array(); 
$list_arr = explode("\n",$list); 
if (in_array('qwerty',$list_arr)) { 
    echo 'Found'; 
} 
else { 
    echo 'Not Found'; 
} 

返し「が見つかりません」配列の値が、あるにもかかわらず、「見つかりません」それが真実であるべきときは偽ですか?提案をお願いします。私が実際に使用しているリストには、10K以上の値があるため、ここでは短縮しました。

+0

使用しているOSは何ですか?ウィンドウでは、行末は実際には2文字です:\ r \ n、\ nで分割すると、 'テキスト\ r'、 'リスト\ r'、および '例'が得られます。 –

+0

あなたは '\ n \ 'ではなく、' \ r \ n'を持っていますか? –

+0

'var_dump($ list_arr);'と出力を投稿できますか? – MrGlass

答えて

9

あなたはこの正確な例を使用しているし、Windows PC上でコーディングしている場合、問題は、Windowsの店のラインが使用してフィードという事実から来ている:

\r\n 

をこのように、あなたは\ n個に分割したときあなただけが目に見えない\ rをあなたのアイテムの最後に置き、その理由で一致しません。

+0

私はLinuxで問題は解決しました –

+0

エディタで設定することができますが、ノートパッドではありません – Esailija

+0

私はメモ帳++を使用してPHPをコードします –

8

リストは実際には\r\nで区切られていますが、\nではありません。

$list_arr = explode("\r\n",$list); 
+0

何とか私にそれを打ちなさい... 4秒? –

+0

右、 "\ r"で区切って文字列として "text \ r"になります。見てみると 'in_array()'に入れてみてください。 – Ariel

+0

@MathieuDumoulin:私は忍者です:P –

0

既に述べたように、Windowsは行末の文字として\ r \ nを使用します。 Unixは\ nを使い、Macは\ rを使います。移植可能なコードを作成するには、あなたの文字列を爆発する定数PHP_EOLを使用します。

$list_arr = explode(PHP_EOL, $list) 

その方法は、あなたはそれが常に正しく動作することを確認しています。

+0

WindowsはEOLを\ r \ nとして保存しますが、linuxのPC上で実行すると、\ nのみ:http://ca3.phpになります。 net/manual/en/reserved.constants.php –

+0

@MathieuDumoulin提供されているリンクにはそのことは記載されていません。それは単にプラットフォームのための "行末の文字"と言います。 Unixプラットフォーム上でWindowsで終了するエディタを使用すると、私の解決策はうまくいかないでしょう。 –

1

これは、値をリストに入れるのはかなり奇妙な方法です。だから私はあなたが最終的に別のファイルから配列への線にしようとしていると仮定しています。あなたはそうするでしょうか

各行を別の配列項目に読み込むには。あなたのコードサンプルのようにフロントまで値を知っている場合は、あなただけの配列にそれらを置くのではなく、文字列からそれらを読み込む必要があります

test 
list 
example 

:のようなファイル参照ルックス

単に文字列から値を読み取る必要がある場合は、PHP_EOL定数を使用して改行を定義することをお勧めします。このように:

PHP_EOL定数は、改行を定義する値を取得するプラットフォームに依存しない方法を提供します。

関連する問題