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 管理系统程序中的后门
Aug 05 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
PHP include_path设置技巧分享
Jul 03 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 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
使用Apache的rewrite技术
2006/06/22 PHP
一个php作的文本留言本的例子(六)
2006/10/09 PHP
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
python实现简易云音乐播放器
2018/01/04 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python实现微信防撤回神器
2019/04/29 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
上班离岗检讨书
2014/09/10 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
大学生暑期实践报告
2015/07/13 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript