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数组应用之比较两个时间的相减排序
Aug 18 PHP
php cookie 登录验证示例代码
Mar 16 PHP
PHP新手入门学习方法
May 08 PHP
php学习之 循环结构实现代码
Jun 09 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
CentOS安装php v8js教程
Feb 26 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP中Trait及其应用详解
Feb 14 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
PHP的反射机制实例详解
Mar 29 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
Terran魔法科技
2020/03/14 星际争霸
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
PHP之短标签开启设置
2013/06/17 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
PHP检测用户语言的方法
2015/06/15 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
php批量修改表结构实例
2017/05/24 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
layui实现数据分页功能
2019/07/27 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Django基础之Model操作步骤(介绍)
2017/05/27 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
django 将model转换为字典的方法示例
2018/10/16 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
股份合作协议书范本
2014/04/14 职场文书
医学求职信
2014/05/28 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
详解MySQL集群搭建
2021/05/26 MySQL