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 curl_setopt()函数实例代码与参数分析
Jun 02 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
set_include_path和get_include_path使用及注意事项
Feb 02 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
php_pdo 预处理语句详解
Nov 21 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
Jquery 扩展方法
2010/05/06 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
Python实现list反转实例汇总
2014/11/11 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
快速入手Python字符编码
2016/08/03 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
英国女鞋购物网站:Moda in Pelle
2019/02/18 全球购物
经典c++面试题六
2012/01/18 面试题
几个Linux面试题笔试题
2016/08/01 面试题
领导证婚人证婚词
2014/01/13 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
yy生日主持词
2014/03/20 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
5行Python代码实现一键批量扣图
2021/06/29 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技