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设计模式之责任链模式的深入解析
Jun 13 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
解析php安全性问题中的:Null 字符问题
Jun 21 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
PHP线程的内存回收问题
Jul 08 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 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+MySql编写聊天室
2006/10/09 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
js动态获取时间的方法分析
2019/08/02 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
利用ctypes提高Python的执行速度
2016/09/09 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python实现维吉尼亚加密法
2019/03/20 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
学期自我鉴定范文
2013/10/01 职场文书
丑小鸭教学反思
2014/02/03 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
社会实践活动总结报告
2014/04/29 职场文书
快递员岗位职责
2014/09/12 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android