有如下代码:
var_dump(in_array('0', array('abc', 'def'))); var_dump(in_array(0, array('abc', 'def'))); var_dump(in_array('1', array('abc', 'def'))); var_dump(in_array(1, array('abc', 'def')));
会输出:
boolean false boolean true boolean false boolean false
第 2 个输出与我们预想的不一样,为什么会出现这种情况呢?
in_array 函数在进行比较的时候,会先进行类型转换,字符串和数字进行比较,会将字符串转换为数字,而字符串被强制为数字 0,因此 in_array(0, array[‘abc’, ‘def’]); 为 TRUE
为了避免这种意外,可以在 in_array 函数添加第三个参数 in_array(0, array[‘abc’, ‘def], TRUE);,那么在比较的时候除了比较值还会比较类型。