这些是预期的(每https://php.net/manual/en/language.operators.array.php):
assert( range( 0, 0 ) == [0] );
assert( range( 0, 0 ) == ['0'] );
assert( range( 0, 0 ) !== ['not zero'] );
assert( range( 0, 1 ) != ['not zero', 'not zero'] );
但是为什么range( 0, 0 )
显然被视为==
等于任何一个单元素数组,而不管其值如何?
assert( range( 0, 0 ) == ['not zero'] ); // return TRUE??
答案 0 :(得分:1)
更好的解释是==
运算符将数组元素转换为 int ,因为运算符的左侧是带有int的数组。
因为intval('not zero')
和(int) 'not zero'
都将返回0,所以比较将返回true,因为它是0(就像可以看到的here)。
在使用===
时,PHP没有进行类型转换,因此字符串保留为字符串,因此比较失败(来自PHP operators):
===
:如果$ a和$ b具有相同顺序的相同键/值对且具有相同的类型,则为TRUE。