从函数返回数组时,in_array函数不能正常工作

时间:2013-05-03 17:03:16

标签: php arrays

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

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

2 个答案:

答案 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));

后者还会删除前导空格和尾随空格以及可能并不总是合适的标签。