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 08 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
php将金额数字转化为中文大写
Jul 09 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
php关闭warning问题的解决方法
May 17 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 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
我的论坛源代码(四)
2006/10/09 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
推荐dojo学习笔记
2007/03/24 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
python3.4爬虫demo
2019/01/22 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
Python爬虫教程知识点总结
2020/10/19 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
聚网科技C++面试笔试题
2015/09/01 面试题
简历的个人自我评价范文
2014/01/03 职场文书
经典英文广告词
2014/03/18 职场文书
《长相思》听课反思
2014/04/10 职场文书
食品销售计划书
2014/04/26 职场文书
停车场管理协议书范本
2014/10/08 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书