1不在array()中,代码应返回FALSE而不是TRUE.你知道为什么吗?
<?php
var_dump(in_array(1, array('1:foo'))); // TRUE, why?
var_dump(in_array('1', array('1:foo'))); // FALSE
Run Code Online (Sandbox Code Playgroud)
正如@ knittl已经说过,这是因为类型强制.怎么了:
var_dump(in_array(1, array('1:foo')));
//PHP is going to try to cast '1:foo' to an integer, because your needle is an int.
Run Code Online (Sandbox Code Playgroud)
强制转换为(int)'1:foo',结果为整数1,所以实际上我们得到了这个:
var_dump(in_array(1, array(1))); //Which is TRUE
Run Code Online (Sandbox Code Playgroud)
而第二个陈述是错误的.它是错误的,因为它们都是相同的类型,PHP不再尝试任何演员.当然"1"与"1:foo"不同
var_dump(in_array('1', array('1:foo'))); //Which is FALSE
Run Code Online (Sandbox Code Playgroud)