怎么修改php.in的时间,PHP中in_array的隐式转换的解决方法

本文讲述了在PHP中使用in_array()函数进行参数校验时遇到的问题,即当混合int和string类型参数时,因类型转换导致的误判。作者通过示例代码解释了问题的原因,并提出了解决方案,包括设置in_array()的第三个参数为true以检查类型一致,以及建议将不同类型参数分开存储并分别校验。此外,文章强调了严谨的数据校验重要性。
摘要由CSDN通过智能技术生成

问题

今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是int和string两种类型,为了校验方便,我打算把所有的参数都放在数组中,然后用in_array(0, $param)判断 int 参数是否为0,再单独判断string参数是否为空,示例代码如下:

if(in_array(0, $param) || $param['img'] == '') {

$this->errorCode = 10030;

$this->errorMessage = '参数不正确';

return false;

}

可是自测时发现,传入正确的参数,都会返回参数不正确的提示!!!

原因

出现这种情况,正是因为in_array惹的祸,in_array(search,array)等价于将数组中的每个value与search比较,由于我$param数组中除了有int参数,还有一个string参数,相当于用string和int去比较,PHP的隐式转换规则:

非数字字符串和整数比较,字符串自动转换为int(0)

下面的例子就验证了我们的说法:

$a = (int)'abc';

var_dump($a); //int(0)

$c = array(0,1,2,3);

if(in_array('abc', $c)) {

echo 'exist';

} else {

echo 'not exist';

} //exist

解决办法

in_array增加第三个参数true,用来检查搜索的数据与数组的值的类型是否相同,这样函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true

针对我上面出现的业务,完全可以严谨一些,将int型数据存一个数组,string存一个数组,两个不同类型的数组分别进行数据校验,这样也不会出现上面的问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值