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脚本数据库功能详解(上)
Oct 09 PHP
第十一节--重载
Nov 16 PHP
开源SNS系统-ThinkSNS
May 18 PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 PHP
php静态文件生成类实例分析
Jan 03 PHP
php去掉文件前几行的方法
Jul 29 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
php中访问修饰符的知识点总结
Jan 27 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
May 15 PHP
PHP引擎php.ini参数优化深入讲解
Mar 24 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
php反弹shell实现代码
2009/04/22 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
JavaScript 学习笔记(五)
2009/12/31 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
Python中实现三目运算的方法
2015/06/21 Python
Selenium的使用详解
2018/10/19 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
美国诺德斯特龙百货官网:Nordstrom
2016/08/23 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
给实习单位的感谢信
2014/02/01 职场文书
晚会主持词开场白
2014/03/17 职场文书
红色旅游心得体会
2014/09/03 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
婚宴父母致辞
2015/07/27 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
各国货币符号大全
2022/02/17 杂记