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 相关文章推荐
example1.php
Oct 09 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
探讨php中header的用法详解
Jun 07 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
一个PHP二维数组排序的函数分享
Jan 17 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
Oct 30 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
is_file和file_exists效率比较
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 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
python开发之str.format()用法实例分析
2016/02/22 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
用python绘制樱花树
2020/10/09 Python
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
Python文件操作的面试题
2013/06/22 面试题
园长自我鉴定
2013/10/06 职场文书
十八大感想感言
2014/02/10 职场文书
中职招生先进个人材料
2014/08/31 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
建国大业观后感600字
2015/06/01 职场文书
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android