Php 为什么in#u数组(1,array(';1:foo';)返回TRUE?
1不在数组()中,代码应返回FALSE而不是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,
正如@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