6

in_array()を使用すると、PHPは常に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';
}

'test'が配列の値であるにもかかわらず、'NotFound'を返します

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

「見つかりません」を返します。

真であるはずなのになぜ偽を返すのですか?何か提案をしてください。私が実際に使用しているリストには10​​Kを超える値があるため、ここでは短くしました。

4

4 に答える 4

11

この正確な例を使用していて、Windows PCでコーディングしている場合、問題は、Windowsが以下を使用してラインフィードを保存するという事実に起因します。

\r\n

したがって、\ nで分割すると、アイテムの最後に\ rが表示されないままになり、そのために一致しなくなります。

于 2012-07-16T20:26:50.427 に答える
8

リストは、実際\r\nにはだけでなく、で区切られています\n

$list_arr = explode("\r\n",$list);
于 2012-07-16T20:26:31.977 に答える
1

これは、値をリストに入れるかなり奇妙な方法です。したがって、最終的には別のファイルから配列に行を行おうとしていると思います。その場合、あなたはただするでしょう

file('path/to/file');

各行を個別の配列項目に読み込みます。

参照されるファイルは次のようになります。

test
list
example

コードサンプルのように値を前もって知っている場合は、文字列から読み取るのではなく、配列に入れるだけです。

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

$list = 'test' . PHP_EOL . 'list' . PHP_EOL . 'example';
$list_arr = explode(PHP_EOL, $list);

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

于 2012-07-16T20:35:57.403 に答える
0

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

$list_arr = explode(PHP_EOL, $list)

そうすれば、それが常に正しく機能することを確信できます。

于 2012-07-16T20:29:23.120 に答える