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中使用Oracle数据库(4)
Oct 09 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
基于Zend的Captcha机制的应用
May 02 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
PHP session会话操作技巧小结
Sep 27 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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使用curl访问https示例分享
2014/01/17 PHP
php使用正则验证中文
2016/04/06 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
js获取div高度的代码
2008/08/09 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
Python守护线程用法实例
2017/06/23 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
pytest中文文档之编写断言
2019/09/12 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
财产保全担保书范文
2014/04/01 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
个人债务授权委托书
2014/10/17 职场文书
施工安全员岗位职责
2015/04/11 职场文书
消防演习通知
2015/04/25 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
2019广播稿怎么写
2019/04/17 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
python内置进制转换函数的操作
2021/06/02 Python
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python