数组不通过PHP函数in_array

时间:2018-11-07 05:33:30

标签: php arrays function

我使用file()将.txt文件中的单词插入到数组中。根据var_dump(),值是字符串,而print_r给我一个普通的一维数组。

  $words = file('stopWords.txt');

  //var_dump($words);

当我尝试类似的操作时:

 if( in_array('able', $words) ) {
       echo "match found";
 }

什么也没发生,我尝试过用它制作一个测试数组,并且效果很好。 $ word输出的数组中有636个元素。也许这有关系吗?尽管我对此表示怀疑,因为我已经尝试过使用更大的阵列,但仍然可以使用。我不确定导致这种情况发生的原因,似乎只有这个特定的阵列有问题。有人可以在这里帮我吗,谢谢。

1 个答案:

答案 0 :(得分:0)

不只是

 $words = file('stopWords.txt');

使用

$words = file('stopWords.txt',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
  

标志

     

可选参数标志可以是以下常量中的一个或多个:

     

FILE_USE_INCLUDE_PATH   在include_path中搜索文件。

     

FILE_IGNORE_NEW_LINES   在每个数组元素的末尾省略换行符

     

FILE_SKIP_EMPTY_LINES   跳过空行

这是最相关的Omit newline at the end of each array element

基本上,这就是您正在做的事情:

if( in_array('able', ["able\n"]) ) {
   echo "match found";
}

哪个是false。换句话说,它并不完全等同于进行explode("\n", $contents),因为该行(数组项)仍包含换行符。由于in_array不是模糊搜索(基本上是==),因此不会与它们'able' != 'able\n'匹配。

  

注意:除非使用FILE_IGNORE_NEW_LINES,否则结果数组中的每一行都将包含该行的结尾。

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

您还可以像这样$words=array_map('trim', $words);修剪数组中的项目,但是为什么要在有标志的情况下麻烦呢。

欢呼