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二分法在IP地址查询中的应用
Aug 12 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
PHP查询网站的PR值
Oct 30 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 PHP
PHP高并发和大流量解决方案整理
Dec 24 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
linux下编译安装memcached服务
2014/08/03 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python lxml模块安装教程
2015/06/02 Python
python验证码识别实例代码
2018/02/03 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
小学生保护环境倡议书
2014/05/15 职场文书
学习型党组织心得体会
2014/09/12 职场文书
教师三严三实心得体会
2014/10/11 职场文书
三严三实学习心得体会
2014/10/13 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
表扬信格式模板
2015/05/05 职场文书
工作调动申请报告
2015/05/18 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python