Php 为什么in#u数组(1,array(';1:foo';)返回TRUE?

Php 为什么in#u数组(1,array(';1:foo';)返回TRUE?,php,Php,1不在数组()中,代码应返回FALSE而不是TRUE。你知道为什么吗 正如@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. 强制转换为(int)'1:foo',其结果为整数1,因此实际上我们得到: var_dump(in_array(1,

1不在数组()中,代码应返回FALSE而不是TRUE。你知道为什么吗


正如@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.
强制转换为(int)'1:foo',其结果为整数1,因此实际上我们得到:

var_dump(in_array(1,  array(1))); //Which is TRUE
第二种说法是错误的。这是错误的,因为它们都是相同的类型,PHP不再尝试任何强制转换。当然,“1”和“1:foo”不一样


因为您正在将
int
string
进行比较,并且字符串的类型转换为
int
——并且由于该字符串的第一个(或任何字符的第一个序列)元素是一个数字,而下一个元素不是任何int表示的一部分,因此它将更改为该元素=1

. <代码>1=='1:foo'(因为
(int)'1:foo'=='1
)您应该检查文档页面。in_数组需要第三个参数来执行类型敏感检查。
var_dump(in_array('1',  array('1:foo'))); //Which is FALSE
var_dump(in_array(1233,  array('1233:123')));   //also True