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' 是数组中的值,也返回 '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 的值,因此我只是在这里缩短了它。

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 回答