繁体   English   中英

从函数返回数组时,in_array函数无法正常工作

[英]in_array function doesn't work well when returning an array from a function

我有一个打开远程文件以使用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);
}

如果它给“意大利” 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));

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM