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读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
php mysql 封装类实例代码
Sep 18 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
PHP7变量处理机制修改
Mar 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准确取得服务器IP地址的方法
2015/06/02 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
PHP7修改的函数
2021/03/09 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
Vue中的Vux配置指南
2017/12/08 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
vue中使用cropperjs的方法
2018/03/01 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
python批量制作雷达图的实现方法
2016/07/26 Python
详细分析python3的reduce函数
2017/12/05 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
SQL语言面试题
2013/08/27 面试题
资深地理教师自我评价
2013/09/21 职场文书
文秘专业自荐信
2013/10/14 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
2014财务年度工作总结
2014/11/11 职场文书
职称评定个人总结
2015/03/05 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
如何利用React实现图片识别App
2022/02/18 Javascript
MySql分区类型及创建分区的方法
2022/04/13 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL