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 相关文章推荐
Cakephp 执行主要流程
Mar 24 PHP
PHP APC的安装与使用详解
Jun 13 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
php 后端实现JWT认证方法示例
Sep 04 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP 面向对象详解
2012/09/13 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
PHP整合PayPal支付
2015/06/11 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
Python修改列表值问题解决方案
2020/03/06 Python
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
幼儿园中班开学寄语
2014/04/03 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
计划生育个人总结
2015/03/02 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis