PHP中in_array的隐式转换

作者: Lee_DH | 来源:发表于2018-03-05 19:11 被阅读46次

问题

今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是intstring两种类型,为了校验方便,我打算把所有的参数都放在数组中,然后用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)等价于将数组中的每个valuesearch比较,由于我$param数组中除了有int参数,还有一个string参数,相当于用stringint去比较,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中in_array的隐式转换

    问题 今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是int和string两种类型,为了校验方便,我...

  • 扣丁学堂PHP培训简述PHP中in_array的隐式转换的解决方

    本篇文章扣丁学堂PHP培训小编给大家分享一下PHP中in_array的隐式转换的解决方法,文章中有代码列出,对PH...

  • php的数据类型的转换和运算符

    主要分为两种,自动转换和强制类型转换,也就是显式转换和隐式转换,自动转换用的多 php中强制类型转换 在php中的...

  • scala-隐式机制及Akka

    隐式机制及Akka 隐式转换 隐式转换和隐式参数时Scala中两个非常强大的功能,利用隐式转换和隐式参数,可以提供...

  • PHP全栈学习笔记24

    PHP in_array() 函数 定义和用法in_array() 函数搜索数组中是否存在指定的值。 type 参...

  • PHP全栈学习笔记24

    PHP in_array() 函数 定义和用法in_array() 函数搜索数组中是否存在指定的值。 type 参...

  • kotlin基础笔记之类型转换

    Kotlin没有隐式拓宽转换,如 Java 中 int 可以隐式转换为 long,必须要显式类型转换。 显式类型转...

  • C++类型转换

    C++的类型转换分为隐式转换和显式转换 隐式转换举例: int i=4; double d=i;//隐式转换 显式...

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • 数据类型转换,循环体

    PHP其余数据类型转换为逻辑型 强制转换:settype(变量名,类型);隐式转换,根据语句转换*数字——bool...

网友评论

    本文标题:PHP中in_array的隐式转换

    本文链接:https://www.haomeiwen.com/subject/qxoaxftx.html