PHP中in_array的隐式转换的解决方法 问题 今天在写一个接口的时候,需要传入大量的基本信息参数,参数分别是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) 下面的例子就验证了我们的说法: