PHP中in_array的隐式转换的解决方法


Posted in PHP onMarch 06, 2018

问题

今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是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)

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

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

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

PHP 相关文章推荐
用PHP将数据导入到Foxmail
Oct 09 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
php eval函数一句话木马代码
May 21 PHP
php创建无限级树型菜单
Nov 05 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
PHP使用观察者模式处理异常信息的方法详解
Sep 24 PHP
PHP多进程简单实例小结
Nov 09 PHP
php连接MSsql server的五种方法总结
Mar 04 #PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 #PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 #PHP
PHP生成随机数的方法总结
Mar 01 #PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 #PHP
php实现生成带二维码图片并强制下载功能
Feb 24 #PHP
php递归函数怎么用才有效
Feb 24 #PHP
You might like
自动分页的不完整解决方案
2007/01/12 PHP
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
javascript 写类方式之八
2009/07/05 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
jQuery 处理页面的事件详解
2015/01/20 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
python生成验证码图片代码分享
2016/01/28 Python
windows下python安装pip图文教程
2018/05/25 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
python批量处理txt文件的实例代码
2020/01/13 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
高中运动会入场词
2014/02/14 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
南极大冒险观后感
2015/06/05 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
Java并发编程之详解CyclicBarrier线程同步
2021/06/23 Java/Android