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录入页面中动态从数据库中提取数据的实现
Oct 09 PHP
获取远程文件大小的php函数
Jan 11 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
php文件缓存类汇总
Nov 21 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
PHP获取photoshop写入图片文字信息的方法
Mar 31 PHP
php处理复杂xml数据示例
Jul 11 PHP
PHP进程通信基础之信号
Feb 19 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
PHP之短标签开启设置
2013/06/17 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php字符串分割函数用法实例
2015/03/17 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
Python实现的递归神经网络简单示例
2017/08/11 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
自学python用什么系统好
2020/06/23 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
詹天佑教学反思
2014/04/30 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
党支部活动策划方案
2014/08/18 职场文书
爱心捐书倡议书
2015/04/27 职场文书
起诉书范文
2015/05/20 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript