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中变量及部分适用方法
Mar 27 PHP
PHP面向对象分析设计的经验原则
Sep 20 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
php自定义分页类完整实例
Dec 25 PHP
php解决和避免form表单重复提交的几种方法
Aug 31 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
通过PHP实现获取访问用户IP
May 09 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
极简主义法编写JavaScript类
2017/11/02 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
工作自我评价分享
2013/12/01 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
党员公开承诺书范文
2014/03/25 职场文书
运动会广播稿100字
2014/09/14 职场文书
个人委托书如何写
2014/09/25 职场文书
家庭困难证明
2014/10/12 职场文书
惊天动地观后感
2015/06/10 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
委托书范本格式
2019/04/18 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA