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 12 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php 中奖概率算法实现代码
Jan 25 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 PHP
如何解决php-fpm启动不了问题
Nov 17 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
ADODB的数据库封包程序库
2006/12/31 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
深入PHP FTP类的详解
2013/06/13 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
Laravel框架实现超简单的分页效果示例
2019/02/08 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
javascript截取字符串小结
2015/04/28 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
PyCharm代码格式调整方法
2018/05/23 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python实现浪漫的烟花秀
2019/01/30 Python
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
简历的自我评价范文
2014/02/04 职场文书
导购员的岗位职责
2014/02/08 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
土建施工员岗位职责
2015/04/11 职场文书
运动会开幕式主持词
2015/07/01 职场文书
门面租赁合同范文
2019/08/06 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android