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?
该函数对于每个字符串$needle返回true,如果$haystack包含一个值为0的元素!这是设计意图吗?还是应该报告为错误?
'a' == 0
是true
。 - automatix'a' == 0
是true
,但'1' == 0
却是false
(因为(int) '1'
是1
,而1
不等于0
)。 - automatix'a' == 0 IS TRUE
,0 == null IS TRUE
,null == 'a' IS FALSE
. 如果我们用变量替换具体的值,我们会发现这种行为是不合逻辑的:a = b
,b = c
,c <> a
。 - automatix