我有一个函数可以打开一个远程文件来获取cURL库的内容。然后该函数返回一个包含文件内容的数组。
然后,当它使用in_array
函数检查数组中是否存在该特定值时,总是显示该值不存在,即使它存在。 < / p>
这是代码以及远程文件的内容。
function getCountry($file) {
$fop = curl_init($file);
curl_setopt($fop, CURLOPT_HEADER, 0);
curl_setopt($fop, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($fop);
curl_close($fop);
$fcontent = explode("\n", $result);
return $fcontent;
}
$file = "http://localhost/countries.txt";
$countries = getCountry($file);
if (in_array('italy', $countries)) {
echo "Exists";
} else {
echo "Not exists";
}
在远程文件countries.txt
的内容中,一行中的每个句子或单词都是这样的:
spain
italy
norway
canada
france
正如我之前提到的,它总是显示该值不存在,即使它确实存在。
答案 0 :(得分:2)
我很确定你的源文件中有回车符等稀疏字符。在getCountry
来电后尝试此操作:
foreach($countries as &$country) {
echo "'$country' (".strlen($country).")<br>";
$country = trim($country);
}
如果它给'意大利'一个strlen
6,并不会让我感到惊讶,并解决问题。
正确的解决方法是在解析后立即清理内容:
$fcontent = array_map('trim', explode("\n", $result));
答案 1 :(得分:1)
如果您不确定文件中是否会有CRLF,而不是explode()
,则可以使用preg_split()
,如下所示:
return preg_split('/\r?\n/', $result);
或者,将trim()
应用于每个结果:
return array_map('trim', explode("\n", $result));
后者还会删除前导空格和尾随空格以及可能并不总是合适的标签。