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文本操作类
Nov 25 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 PHP
Swoole扩展的6种模式深入详解
Mar 04 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 表单验证实现代码
2009/03/10 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
动态加载js的几种方法
2006/10/23 Javascript
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
清除输入框内的空格
2016/12/21 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
React Router基础使用
2017/01/17 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
Python设计模式之代理模式实例
2014/04/26 Python
Python 多核并行计算的示例代码
2017/11/07 Python
python调用百度语音REST API
2018/08/30 Python
详解python多线程之间的同步(一)
2019/04/03 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
python爬虫---requests库的用法详解
2020/09/28 Python
使用python实现学生信息管理系统
2021/02/25 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
Servlet如何得到服务器的信息
2015/12/22 面试题
送餐员岗位职责范本
2014/02/21 职场文书
经营目标管理责任书
2014/07/25 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
任命书格式范文
2015/09/22 职场文书