• 售前

  • 售后

热门帖子
入门百科

PHP中in_array的隐式转换的办理方法

[复制链接]
飞一航符cx 显示全部楼层 发表于 2021-10-25 18:50:08 |阅读模式 打印 上一主题 下一主题
题目
本日在写一个接口的时间,须要传入大量的基本信息参数,参数分别是int和string两种类型,为了校验方便,我打算把全部的参数都放在数组中,然后用in_array(0, $param)判定 int 参数是否为0,再单独判定string参数是否为空,示例代码如下:
  1.       if(in_array(0, $param) || $param['img'] == '') {
  2.         $this->errorCode = 10030;
  3.         $this->errorMessage = '参数不正确';
  4.         return false;
  5.       }
复制代码
但是自测时发现,传入精确的参数,都会返回参数不精确的提示!!!
缘故原由
出现这种情况,正是由于in_array惹的祸,in_array(search,array)等价于将数组中的每个value与search比力,由于我$param数组中除了有int参数,还有一个string参数,相当于用string和int去比力,PHP的隐式转换规则:
非数字字符串和整数比力,字符串主动转换为int(0)

下面的例子就验证了我们的说法:
  1. <?php
  2.   $a = (int)'abc';
  3.   var_dump($a); //int(0)
  4.   $c = array(0,1,2,3);
  5.   if(in_array('abc', $c)) {
  6.     echo 'exist';
  7.   } else {
  8.     echo 'not exist';
  9.   } //exist
复制代码
解决办法
in_array增长第三个参数true,用来查抄搜刮的数据与数组的值的类型是否类似,如许函数只有在元素存在于数组中且数据类型与给定值类似时才返回 true
针对我上面出现的业务,完全可以严谨一些,将int型数据存一个数组,string存一个数组,两个不同类型的数组分别举行数据校验,如许也不会出现上面的题目

以上就是本文的全部内容,盼望对各人的学习有所资助,也盼望各人多多支持脚本之家。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作