学习中因为没有清楚的了解in_array函数的使用,导致了一些意外的结果,总结一下。
函数原型和说明
bool in_array ( mixed needle, array haystack [, bool strict] )
函数功能:在 haystack 中搜索 needle,如果找到则返回 TRUE,否则返回 FALSE。
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中值的类型相同。
注:
1)使用中经常是因为没有使用好第三个参数造成一些问题;
2)如果needle是字符串,则查找是区分大小写的;
3)如果参数1或参数2分别为数字和字符串,且没有使用第三个参数时,则此函数在查找时会将字符串转换成数字(即将字符串转换成0),然后进行查找。
针对以上三个注意事项给出的情况:
1.
$param1='0';
$param2=array('a','b','c');
if (in_array($param1,$param2)){
echo 'find it!';
}else{
echo 'not in array!';
}
//output not in array !
2.参数分别为数字和字符串
$param1=0;
$param2=array('a','b','c');
if (in_array($param1,$param2)){
echo 'find it!';
}else{
echo 'not in array!';
}
//output find it !
查询结果出人意料,这就是由于两个参数分别为数字和字符串,在查找过程中将数组param2转换成数字后变为了0(具体原因可以查看手册字符串与数值比较),所以返回结果为true,解决办法是加上第三个参数true。
php的语法是个双刃剑,在不同的使用场景,要斟酌好不同的使用方法,趋利避害,以免带来意想不到的后果。
posted on
浙公网安备 33010602011771号