1不在array()中,代码应返回FALSE而不是TRUE。你知道为什么吗?
<?php
var_dump(in_array(1, array('1:foo'))); // TRUE, why?
var_dump(in_array('1', array('1:foo'))); // FALSE
答案 0 :(得分:6)
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”
不同var_dump(in_array('1', array('1:foo'))); //Which is FALSE
答案 1 :(得分:1)
因为您要将int
与string
进行比较,并且字符串是类型转换为int
- 并且因为该字符串的第一个(或任何第一个chaq)元素是number和next不是任何int表示的一部分 - 它更改为该元素= 1.
http://php.net/manual/en/language.types.type-juggling.php
var_dump(in_array(1233, array('1233:123'))); //also True