【问题标题】:array not going through php function in_array数组不通过 php 函数 in_array
【发布时间】:2018-11-07 05:33:29
【问题描述】:

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

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

  //var_dump($words);

当我尝试类似:

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

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

【问题讨论】:

  • 你能提供一个var_dump($words);输出的例子吗?
  • FILE_IGNORE_NEW_LINES - AKA 在每个数组元素的末尾省略换行符。 able != able\n 或者换句话说 $words = file('stopWords.txt',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
  • 数组真的很大,所以var_dump输出很多,你想要一个sn-p吗?
  • @ArtisticPhoenix 如何以及为什么会这样?!非常感谢
  • 这很神奇。这是因为return有行尾,并且在数组中不模糊。

标签: php arrays function


【解决方案1】:

不仅仅是

 $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); 这样修剪数组中的项目,但是当它有一个标志时为什么还要麻烦。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多