【问题标题】:What is wrong with the PHP function in_array(...)? [duplicate]PHP 函数 in_array(...) 有什么问题? [复制]
【发布时间】:2016-12-02 14:47:21
【问题描述】:

PHP 函数in_array(...)“检查一个值是否存在于数组中”。

但我在处理字符串时发现了一个非常奇怪的行为 (PHP v7.0.3)。这段代码

$needle = 'a';
$haystacks = [['a'], ['b'], [123], [0]];
foreach ($haystacks as $haystack) {
    $needleIsInHaystack = in_array($needle, $haystack);
    var_dump($needleIsInHaystack);
}

生成以下输出:

bool(true)
bool(false)
bool(false)
bool(true) <- WHAT?

如果$haystack 包含一个值为0 的元素,该函数会为每个string $needle 返回true

真的是设计的吗?或者它是一个错误,应该报告?

【问题讨论】:

    标签: php arrays php-7


    【解决方案1】:

    如果不将in_array的第三个参数设置为true,则使用类型强制进行比较。

    如果第三个参数 strict 设置为 TRUE,那么 in_array() 函数也会检查大海捞针的类型。

    loose comparison rules 下,实际上'a' 等于0,因为(int)'a' == 0

    【讨论】:

    • 感谢您的回答!是的,我没有考虑到,'a' == 0true
    • 而且更疯狂的是:虽然'a' == 0true'1' == 0false(因为(int) '1'11 不是0)。
    • 'a' == 0 IS TRUE0 == null IS TRUEnull == 'a' IS FALSE。如果我们用变量替换具体值,我们会发现这种行为是不合逻辑的:a = bb = cc &lt;&gt; a
    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多