下面这个方法判断元素($needle)是否在数组($haystack)内的
$haystack不单指数组,如果可以用foreach进行遍历也是可以的
public static function isIn($needle, $haystack, $strict = false)
{
if ($haystack instanceof \Traversable) { // 如果$haystack可以用foreach遍历
foreach ($haystack as $value) {
if ($needle == $value && (!$strict || $needle === $haystack)) {
return true;
}
}
} elseif (is_array($haystack)) {
return in_array($needle, $haystack, $strict);
} else {
throw new InvalidParamException('Argument $haystack must be an array or implement Traversable');
}
return false;
}
第五行
if ($needle == $value && (!$strict || $needle === $haystack)) {
为什么是 $needle === $haystack ,而不是 $needle === $value;
$strict 为 TRUE 时指的不是元素值相等并且类型相同吗?关原数组什么事呢?很疑惑,望大神普及一下这个知识点
我这里源文件是$value哦,你的可能版本比较老了,是一个以前bug
$haystack 不一定是数组,只是一个可遍历对象,$strict 为 TRUE 时,用===, 三等号是不做类型转换的