0

我有一个函数可以打开一个远程文件以使用 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

正如我之前提到的,它总是显示该值不存在,即使它确实存在。

4

2 回答 2

2

我很确定您的源文件中包含稀疏字符,例如回车符。通话后试试这个getCountry

foreach($countries as &$country) {
  echo "'$country' (".strlen($country).")<br>";
  $country = trim($country);
}

如果它strlen为“意大利”给出了 6 分,我不会感到惊讶,并在此过程中解决问题。

正确的解决方法是在解析后立即清理内容:

$fcontent = array_map('trim', explode("\n", $result));
于 2013-05-03T17:06:21.250 回答
1

如果你不确定文件中是否会有 CRLF,explode()你可以preg_split()这样使用:

return preg_split('/\r?\n/', $result);

或者,适用trim()于每个结果:

return array_map('trim', explode("\n", $result));

后者还将删除可能并不总是合适的前导和尾随空格和制表符。

于 2013-05-03T17:18:47.157 回答