2017-02-04 10:28:49 2559次浏览 2条回答 1 悬赏 50 金钱

下面这个方法判断元素($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 时指的不是元素值相等并且类型相同吗?关原数组什么事呢?很疑惑,望大神普及一下这个知识点

最佳答案

  • orzorc 发布于 2017-02-15 17:18 举报

    我这里源文件是$value哦,你的可能版本比较老了,是一个以前bug

    1 条回复
    回复于 2017-03-17 17:35 回复

    确实是bug,然后修复了,我那个是2016-4-28下的版本了,我还以为是什么高科技

  • 回答于 2017-02-04 14:38 举报

    $haystack 不一定是数组,只是一个可遍历对象,$strict 为 TRUE 时,用===, 三等号是不做类型转换的

    1 条回复
    回复于 2017-02-13 12:01 回复

    为什么是 $needle === $haystack ,而不是 $needle === $value;
    为什么是 $needle === $haystack ,而不是 $needle === $value;
    为什么是 $needle === $haystack ,而不是 $needle === $value;
    我想知道的是这个

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
a40304
主管

a40304

注册时间:2014-08-27
最后登录:2019-07-17
在线时长:13小时8分
  • 粉丝4
  • 金钱345
  • 威望20
  • 积分675

热门问题