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代码
Apr 09 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
php中几种常见安全设置详解
Apr 06 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
php学习之运算符相关概念
Jun 09 PHP
PHP的命令行命令使用指南
Aug 18 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
PHP addcslashes()函数讲解
Feb 03 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
js实现点击生成随机div
2020/01/16 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
JS实现简易日历效果
2021/01/25 Javascript
简单了解Python中的几种函数
2017/11/03 Python
python生成ppt的方法
2018/06/07 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
商务英语广告词大全
2014/03/18 职场文书
停车位租赁协议书
2014/09/24 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
python 闭包函数详细介绍
2022/04/19 Python