我有一个函数,它打开一个远程文件,并使用cURL库获取其内容。然后函数返回一个包含文件内容的数组。
然后,当它使用in_array
函数检查该特定值是否存在于数组中时,它总是显示该值不存在,即使它存在。
这是代码和远程文件的内容。
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
正如我前面提到的,它总是显示该值不存在,即使它存在
我非常确定您在源文件中有稀疏的字符,例如回车符。在getCountry
调用之后尝试这个:
foreach($countries as &$country) {
echo "'$country' (".strlen($country).")<br>";
$country = trim($country);
}
如果它给'italy'的strlen
为6,并在此过程中解决问题,我不会感到惊讶。
正确的修复方法是在解析后立即清理内容:
$fcontent = array_map('trim', explode("'n", $result));
如果您不确定文件中是否会有CRLF,则可以使用preg_split()
代替explode()
,如下所示:
return preg_split('/'r?'n/', $result);
或者对每个结果应用trim()
:
return array_map('trim', explode("'n", $result));
后一种方法还将删除不总是合适的前后空格和制表符。