You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中in_array异常字符串匹配问题的原因与解决

问题

我拥有一个小写十六进制字符串数组,使用in_array函数时出现异常:不存在的字符串被判定为存在。代码示例如下:

$x = '000e286592';
$y = '0e06452425';
$testarray = [];
$testarray[] = $x;
if (in_array($y, $testarray)) {
    echo "Array element ".$y." already exists in text array ";
}
print_r($testarray);exit();

上述代码中in_array返回true,但0e06452425并不在数组中,请问该现象原因及解决方法?

原因分析

这是PHP松散类型比较导致的问题。in_array默认使用松散比较(==),当字符串符合科学计数法格式时,PHP会自动将其转换为浮点数:

  • '000e286592'被解析为0(000e286592等价于0 * 10^286592,结果为0)
  • '0e06452425'同样被解析为0(0 * 10^6452425,结果也是0)
    松散比较下两者数值相等,因此in_array返回true。

解决方法

给in_array添加第三个参数true,启用严格类型比较(===),同时对比值和类型,避免字符串被自动转换:

$x = '000e286592';
$y = '0e06452425';
$testarray = [];
$testarray[] = $x;
if (in_array($y, $testarray, true)) {
    echo "Array element ".$y." already exists in text array ";
} else {
    echo "Array element ".$y." does not exist in text array ";
}
print_r($testarray);exit();

此时in_array会严格匹配字符串内容和类型,不会再出现误判。

内容的提问来源于stack exchange,提问作者Peter Blaskowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:45:43