坑出现的原因:
$arr = array('name' => 'test', 'sex' => 'male','age' => 0);
if(in_array('h232',$arr)) { echo 'Yes'; } else { echo 'No'; }
结果输出 : 'Yes'
查找手册,手册上也只是说in_array() : 检查数据中是否存在某个值。
in_array ( mixed $needle
, array $haystack
[, bool $strict
= FALSE
] )
neddle : 待搜索的值
Note:
如果 needle
是字符串,则比较是区分大小写的。
haystack
待搜索的数组。
Note:
如果 haystack只适合一维数组
。
strict
如果第三个参数 strict
的值为 TRUE
则 in_array() 函数还会检查 needle
的类型是否和 haystack
中的相同
返回值:
如果找到 needle
则返回 TRUE
,否则返回 FALSE
。
但是,手册中没说具体是怎么查找的,经过分析。in_array()函数的value值会与搜索的值比较,如果不加第三个参数,in_array()会把搜索的类型强制转换成和value值一样进行比较。
所以,上面的搜索值 ‘h232’ 在和value = 0 进行比较的时候 ‘h234’强制转换成了number 0;
相当于 : var_dump('h232' == 0 ) = true;
结果为 : 'Yes';
希望大家以后多多注意~