在PHP中,in_array函数用于检查数组中是否存在某个值。在检查判断的过程中,会对类型进行转换。有一个面试题用于举例说明。
PHP面试题如下:what is the value of $a?
$a=in_array('01',array('1'))==var_dump('01'==1);
A:TRUE B:FALSE
答案是什么呢?是A,ture。
Why?
分步var_dump一下in_array(’01′,array(’1′)),输出布尔值true;var_dump(’01′==1),也输出布尔值true。后者好理解,前者可能有些疑惑,以为觉得都是字符串,是不等的。
此题关键点就在此了。php在做判断时会对数据进行转换类型。就算是in_array(’000010′,array(’10′))也会返回true,它会把两个值都换成普通的数字来比对,当然是在全数字的情况下,里面掺杂了其他字符串如字母就false了。
同行解说参考:
null 或string,string,将 NULL 转换为 “”,进行数字或词汇比较;
bool 或null,任何其它类型,转换为 bool,FALSE
object,object,内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明;
string,resource 或number,string,resource 或number 将字符串和资源转换成数字,按普通数学比较;
array, array ,具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例);
array, 任何其它类型 ,array 总是更大;
object ,任何其它类型, object 总是更大;