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 相关文章推荐
第十五节--Zend引擎的发展
Nov 16 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
php慢查询日志和错误日志使用详解
Feb 27 PHP
一文搞懂php的垃圾回收机制
Jun 18 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
PHP的历史和优缺点
2006/10/09 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
当当网软件测试笔试题
2015/11/24 面试题
银行类自荐信
2014/02/04 职场文书
班级活动策划书
2014/02/06 职场文书
商务经理岗位职责
2014/07/30 职场文书
司机工作自我鉴定
2014/09/19 职场文书
给领导的感谢信范文
2015/01/23 职场文书
社区植树节活动总结
2015/02/06 职场文书
大学生入党自传2015
2015/06/26 职场文书
CentOS安装Nginx并部署vue
2022/04/12 Servers