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一些有意思的小区别
Dec 06 PHP
php 删除数组元素
Jan 16 PHP
php cookie 登录验证示例代码
Mar 16 PHP
PHP之数组学习
May 29 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
jquery高效反选具体实现
2013/05/05 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
js自定义回调函数
2015/12/13 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
JS验证不重复验证码
2017/02/10 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Python字典对象实现原理详解
2019/07/01 Python
python opencv实现证件照换底功能
2019/08/19 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
个人工作表现评价材料
2014/09/21 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL