学习中因为没有清楚的了解in_array函数的使用,导致了一些意外的结果,总结一下。

 

函数原型和说明

bool in_array ( mixed needle, array haystack [, bool strict] ) 

函数功能:在 haystack 中搜索 needle,如果找到则返回 TRUE,否则返回 FALSE

如果第三个参数 strict 的值为 TRUEin_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 2013-09-21 21:54  HiLittleWorld  阅读(1231)  评论(0)    收藏  举报