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读取html并截取字符串的简单代码
Nov 30 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php ci框架验证码实例分析
Jun 26 PHP
php使用PDO方法详解
Dec 27 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
php实现断点续传大文件示例代码
Jun 19 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
深入了解php4(2)--重访过去
2006/10/09 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
python操作MongoDB基础知识
2013/11/01 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
Python3数字求和的实例
2019/02/19 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
淘宝活动策划方案
2014/02/06 职场文书
小学教师培训感言
2014/02/11 职场文书
员工离职通知函
2015/04/25 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
flex弹性布局详解
2022/03/20 HTML / CSS