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.MVC的模板标签系统(一)
Sep 05 PHP
在线竞拍系统的PHP实现框架(一)
Oct 09 PHP
一个程序下载的管理程序(一)
Oct 09 PHP
Apache2 httpd.conf 中文版
Nov 17 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
JavaScript实现删除电脑的关机键
Jul 26 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
浅析PHP数据导出知识点
Feb 17 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
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
php服务器的系统详解
2019/10/12 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
理解javascript异步编程
2016/01/27 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
Python with标签使用方法解析
2020/01/17 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
专业销售业务员求职信
2013/11/18 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
党在我心中演讲稿
2014/09/02 职场文书
影视广告专业求职信
2014/09/02 职场文书
师德师风自我评价范文
2014/09/11 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android