为什么in_array(1,数组(' 1:foo'))返回TRUE?

时间:2014-11-19 06:55:37

标签: php

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

<?php
var_dump(in_array(1,  array('1:foo'))); // TRUE, why?
var_dump(in_array('1',  array('1:foo'))); // FALSE

2 个答案:

答案 0 :(得分:6)

正如@ 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”

不同
var_dump(in_array('1',  array('1:foo'))); //Which is FALSE

答案 1 :(得分:1)

因为您要将intstring进行比较,并且字符串是类型转换为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