php踩过的那些坑(1)in

前言

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():这不怪我】

这是使用者对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;

好啦今天萌萌的内容就到这啦,注意下方呦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829A0PHF200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券