php编程中如何避免调用in_array()函数出错问题

  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来判断。

扫描二维码关注公众号,回复: 3050486 查看本文章

  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开发公司燚轩科技整理发布,原创不易,转载请注明出处及作者。

猜你喜欢

转载自blog.51cto.com/13686158/2170163