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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
DedeCms模板安装/制作概述
Mar 11 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
php读取excel文件的简单实例
Aug 26 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
PHP动态柱状图实现方法
Mar 30 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 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
Home Coffee Roasting
2021/03/03 咖啡文化
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
php基础学习之变量的使用
2011/06/09 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
python远程登录代码
2008/04/29 Python
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
python爬取微信公众号文章
2018/08/31 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
python装饰器常见使用方法分析
2019/06/26 Python
python实现控制COM口的示例
2019/07/03 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
公司担保书范文
2014/05/21 职场文书
2014年护士长工作总结
2014/11/11 职场文书
怎样写家长意见
2015/06/04 职场文书
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android