php开发过程中,经常会遇到判断一维数组中是否含有某个元素,这是会用到in_array();由于php是弱类型的语言,所以不小心的话,也会踩到“坑”。(注:这里测试用到的php版本是5.6。)那么具体该如何注意呢?下面就来跟大家分享一些实用经验。
一、前方有坑
直接上代码:
$arr = [‘php在路上‘,1];
echo in_array(true,$arr) ? 1 : 0;
echo in_array(0,$arr) ? 1 : 0;
结果:
11
二、为啥有坑
其实,从底层源码上来说,in_array()也是用了循环逐个比较的方法。而前几期我们说了,’php在路上’==true,’php在路上’==0这两个是成立的。
看了网上,有人使用for来判断。
php是弱类型语言,对变量的定义和使用不是严格,多数的“坑”都是来源于这一点。不过,这个“坑”php语言表示不背这个坑,in_array()函数表示委屈。
这是使用者对in_array()的用法没好好看手册的原因,看手册:
函数:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
参数:
needle:要查找的值。
haystack:查找的数组
strict:是否严格匹配,TRUE 或者 FALSE
返回值
如果找到 needle 则返回 TRUE,否则返回 FALSE。
重点来了,关键在第三个参数:strict,如果为TRUE,会先比较类型再比较值。默认为false,false,false,false……原因在这!
so,在使用in_array()函数的时候别省略第三个参数。
三、防坑扩展
1、在in_array()函数中,needle参数是区分大小写的。
2、有时候在数组搜索给定的值时,如果还想知道给定值所在的索引,那就会用到array_search()函数。这个函数也是有第三个参数的,也是表示是否严格匹配。
另外,由于array_search()函数返回的是给定值所在的索引,所以返回值可能是0或者false,所以在后续的判断是否存在给定值的时候,要使用“===”来判断。
如:
$arr = [‘12‘,13,‘php在路上‘];
echo array_search(‘12‘,$arr,true)===false ? ‘没找到‘ : ‘找到了‘;
四、防坑互动
看代码:
$arr = [‘php在路上‘,12,‘‘,[‘我是字符串‘]];
echo in_array([0],$arr) ? 1 : 0;
现在大家清楚为什么在调用in_array()时出错了吧,那么在以后的编码中一定要注意了,如果还是存在不理解的地方或者有其他方面开发疑问的话,都是可以留言咨询获取帮助的。
本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,转载请注明出处及作者。
原文地址:http://blog.51cto.com/13686158/2170163