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读注册表
Oct 09 PHP
无数据库的详细域名查询程序PHP版(3)
Oct 09 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
php提取微信账单的有效信息
Oct 01 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 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
php上传大文件设置方法
2016/04/14 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
js 编写规范
2010/03/03 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
vue项目实战总结篇
2018/02/11 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
angularJS开发注意事项
2018/05/26 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python os.fork() 循环输出方法
2019/08/08 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
J2EE模式面试题
2016/10/11 面试题
医科学校毕业生自荐信
2013/11/09 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
会计毕业生自荐信
2013/11/21 职场文书
项目总经理岗位职责
2014/02/14 职场文书
三万活动总结
2014/04/28 职场文书
文明村镇申报材料
2014/05/06 职场文书
求职信模板
2014/05/23 职场文书