4

私は次のPHPコードを持っています:

$haystack  = file("dictionary.txt");
$needle = 'john';
$flipped_haystack = array_flip($haystack);
if (isset($flipped_haystack[$needle])) {
    echo "Yes it's there!";
}
else {
    echo "No, it's not there!";
}

の内容は次のdictionary.txtとおりです(UTF-8エンコード)。

john

$haystackどういうわけか、問題なく印刷されているにもかかわらず、私は誤りを犯し続けています。私が問題を抱え続けているのは間違いです。$haystackまたは、次のコードに変更してみたところ、trueとして正しく返されました。

$haystack = array("john");

コードが誤ってfalseを返すのはなぜですか?

4

4 に答える 4

4

これは、各要素の終わりで改行が原因である可能性があります。これを試して:

$haystack  = file("dictionary.txt", FILE_IGNORE_NEW_LINES);

PHPマニュアルからのメモは次のとおりです。

Each line in the resulting array will include the line ending, unless FILE_IGNORE_NEW_LINES is used, so you still need to use rtrim() if you do not want the line ending present.
于 2013-03-17T04:52:16.097 に答える
2

問題は次の事実に依存していfileます:

ファイルを配列で返します。配列の各要素はファイル内の行に対応し、改行は付けられたままです。

したがってjohn、とは等しくありませんjohn\n

次のフラグを設定するだけです。

file("dictionary.txt", FILE_IGNORE_NEW_LINES);
于 2013-03-17T04:54:57.430 に答える
2

このfile()関数は、配列要素に改行文字を追加しています。

マニュアルページを参照してください:http ://www.php.net/manual/en/function.file.php

次の方法でファイルを開きます。

$haystack = file('dictionary.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

また、デバッグを支援するために、次のような行を追加できます。

var_dump($haystack);

var_dump($flipped_haystack);

これはあなたにこれを示したでしょう:

array(1) {
  [0] =>
  string(5) "john\n"
}
array(1) {
  'john
' =>
  int(0)
}
No, it's not there!
于 2013-03-17T04:57:28.057 に答える
1

FILE_IGNORE_NEW_LINES 配列で読み取られるファイルからの改行がある可能性があるため、パラメーターを使用してください

$ haystack = file( "dictionary.txt"、FILE_IGNORE_NEW_LINES);

http://php.net/manual/en/function.file.php

于 2013-03-17T04:56:32.670 に答える