当我使用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';
}
返回'Not Found',即使'test'是数组中的值
$list = 'test
list
example';
$list_arr = array();
$list_arr = explode("\n",$list);
if (in_array('qwerty',$list_arr)) {
echo 'Found';
}
else {
echo 'Not Found';
}
返回'Not Found',因为它应该
为什么它应该是真的,它会返回false?请提出任何建议。我实际使用的列表有超过10K的值,因此我在这里缩短了它。
答案 0 :(得分:10)
如果您正在使用这个确切的示例并在Windows PC上进行编码,则问题来自于Windows使用以下方式存储换行符:
\r\n
因此,当您在\ n上拆分时,只会在项目末尾保留一个不可见的\ r \ n,因此无法匹配。
答案 1 :(得分:8)
您的列表实际上由\r\n
分隔,而不仅仅是\n
。
$list_arr = explode("\r\n",$list);
答案 2 :(得分: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常量将为您提供一种更好的独立于平台的方式来获取定义换行符的值。
答案 3 :(得分:0)
如前所述,Windows使用\ r \ n作为行尾字符。 Unix使用\ n而Mac使用\ r \ n。要制作可移植代码,请使用PHP_EOL常量来展开字符串:
$list_arr = explode(PHP_EOL, $list)
这样,您确定它始终可以正常工作。