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 相关文章推荐
如何做到多笔资料的同步
Oct 09 PHP
php生成EXCEL的东东
Oct 09 PHP
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
PHP中数组的三种排序方法分享
May 07 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
基于php 随机数的深入理解
Jun 05 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
php微信开发接入
Aug 27 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 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中模拟POST传递数据的两种方法分享
2011/09/16 PHP
php对数组排序代码分享
2014/02/24 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
JS之相等操作符详解
2016/09/13 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
详解JavaScript树结构
2017/01/09 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
Django开发中的日志输出的方法
2018/07/02 Python
python实现dijkstra最短路由算法
2019/01/17 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
python将unicode和str互相转化的实现
2020/05/11 Python
python中def是做什么的
2020/06/10 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
经典导游欢迎词大全
2014/01/16 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
书法社团活动总结
2015/05/07 职场文书
民事答辩状范本
2015/05/21 职场文书
值班管理制度范本
2015/08/06 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis
深入理解 Golang 的字符串
2022/05/04 Golang