PHP中in_array的隐式转换的解决方法

 更新时间:2018年03月06日 11:01:31   作者:Lee_DH  
本篇文章主要介绍了PHP中in_array的隐式转换的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

问题

今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是int和string两种类型,为了校验方便,我打算把所有的参数都放在数组中,然后用in_array(0, $param)判断 int 参数是否为0,再单独判断string参数是否为空,示例代码如下:

1
2
3
4
5
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)

下面的例子就验证了我们的说法:

1
2
3
4
5
6
7
8
9
10
11
<?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存一个数组,两个不同类型的数组分别进行数据校验,这样也不会出现上面的问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://www.jianshu.com/p/2b3e687879ac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • PHP实现微信发红包程序

    PHP实现微信发红包程序

    微信发红包是比较流行的一件事情,老老少少都会使用微信发红包,接下来,小编给大家分享在生活中常碰到的一个php实现微信发红包程序的算法,希望这个程序对大家在做微信卡发的朋友有所帮助
    2015-08-08
  • php页面,mysql数据库转utf-8乱码,utf-8编码问题总结

    php页面,mysql数据库转utf-8乱码,utf-8编码问题总结

    一个网站如果需要国际化,就需要将编码从GB2312转成UTF-8,其中有很多的问题需要注意,如果没有转换彻底,将会有很多的编码问题出现!接下来通过本篇文章给大家分享php页面,mysql数据库转utf-8乱码,utf-8编码问题总结,需要的朋友可以参考下
    2015-08-08
  • PHP中命名空间的使用例子

    PHP中命名空间的使用例子

    今天小编就为大家分享一篇关于PHP中命名空间的使用例子,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • php中的curl使用入门教程和常见用法实例

    php中的curl使用入门教程和常见用法实例

    起先cURL是做为一种命令行工具设计出来的,比较幸运的是,php也支持cURL了。通过cURL这个利器,我们能在php程序中自由地发送HTTP请求到某个url来获取或者提交数据,并且支持其它多种协议,比如FTP,Telnet以及SMTP等。在这篇博文中,我将简述下,在php中具体怎么使用cURL来处理一些事情。
    2014-04-04
  • Laravel异常上下文解决方案分享

    Laravel异常上下文解决方案分享

    异常处理是编程中十分重要但也最容易被人忽视的语言特性,下面这篇文章主要给大家介绍了关于Laravel异常上下文解决方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • yii2-GridView在开发中常用的功能及技巧总结

    yii2-GridView在开发中常用的功能及技巧总结

    本篇文章主要介绍了yii2-GridView在开发中常用的功能及技巧总结,数据网格或者说 GridView 小部件是Yii中最强大的部件之一。有兴趣的可以了解一下。
    2017-01-01
  • PHP加密解密类实例代码

    PHP加密解密类实例代码

    这篇文章主要介绍了PHP加密解密类实例代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • phpstudy本地环境搭建超详细图文教程

    phpstudy本地环境搭建超详细图文教程

    这篇文章主要给大家介绍了关于phpstudy本地环境搭建超详细图文教程的相关资料,phpStudy是集安全、高效、功能于一体且完全免费的一键服务器环境搭建软件,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • php文件操作实例代码

    php文件操作实例代码

    php中的文件操作比asp要简单很多,而且功能强大。学习php的朋友可以参考下
    2012-05-05
  • Yii2框架实现利用mpdf创建pdf文件功能示例

    Yii2框架实现利用mpdf创建pdf文件功能示例

    这篇文章主要介绍了Yii2框架实现利用mpdf创建pdf文件功能,结合实例形式分析了mpdf的下载、安装及结合Yii2框架创建pdf文件的相关操作技巧,需要的朋友可以参考下
    2019-02-02

最新评论