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 相关文章推荐
phpmyadmin 访问被拒绝的真实原因
Jun 15 PHP
PHP 可阅读随机字符串代码
May 26 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
PHP数组排序函数合集 以及它们之间的联系分析
Jun 27 PHP
php二分查找二种实现示例
Mar 12 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
PHP策略模式定义与用法示例
Jul 27 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/06/24 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JavaScript的面向对象(二)
2006/11/09 Javascript
奇妙的js
2007/09/24 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python魔术方法专题
2020/06/19 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
工艺工程师工作职责
2013/11/23 职场文书
高三毕业寄语
2014/04/10 职场文书
创业培训计划书
2014/05/03 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
售房协议书范本2014
2014/10/23 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
工作会议通知
2015/04/15 职场文书
一条慢SQL语句引发的改造之路
2022/03/16 MySQL
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技