php数组中=%3e符号什么意思,PHP 中 in_array 的隐式转换

PHP 中 in_array 的隐式转换

问题

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

$this->errorCode=10030;

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

returnfalse;

}

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

原因

出现这种情况, 正是因为 in_array 惹的祸,

in_array(search,array)

等价于将数组中的每个 value 与 search 比较, 由于我 $param 数组中除了有 int 参数, 还有一个 string 参数, 相当于用 string 和 int 去比较, PHP 的隐式转换规则:

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

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

$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 存一个数组, 两个不同类型的数组分别进行数据校验, 这样也不会出现上面的问题

来源: http://www.jianshu.com/p/2b3e687879ac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值