为什么in_array() 错误地返回这些(大数字)字符串的 true?
我不明白这个代码有什么问题。它返回“已找到”,它不应该返回。
$lead = "418176000000069007";
$diff = array("418176000000069003","418176000000057001");
if (in_array($lead,$diff))
echo "Found";
else
echo "Not found";
我不明白这个代码有什么问题。它返回“已找到”,它不应该返回。
$lead = "418176000000069007";
$diff = array("418176000000069003","418176000000057001");
if (in_array($lead,$diff))
echo "Found";
else
echo "Not found";
注意:此行为在 PHP 5.4 中已更改。
默认情况下,使用松散比较 (),这意味着数字字符串将转换为数字并作为数字进行比较。在 PHP 5.4 之前,如果你在平台的浮点类型中没有足够的精度,那么差异就会丢失,你得到了错误的答案。in_array
==
解决方案是通过将额外的参数传递给以下命令来启用比较 ():strict
===
Boolean
in_array
$lead = "418176000000069007";
$diff = array("418176000000069003", "418176000000057001");
if ( in_array($lead, $diff, true) )
echo "Found";
else
echo "Not found";
然后将字符串比较为没有数字强制的字符串。但是,这意味着您确实会丢失字符串(如“01234”和“1234”)的默认等效性。
此行为被报告为错误,并在 PHP 5.4 中修复。与 相比,数字字符串仍会转换为数字,但前提是字符串的值适合平台的数字类型。==
注意:这是 PHP 旧版本中的一个错误,在 PHP 5.4
和更高版本中已得到纠正。
这是因为存储数量的限制PHP
这里真正的问题是因为 - 在我们的案例中超过了值。PHP_INT_MAX
尝试/并且不使用引号。它将导致echo
print_r
$lead
$diff
$lead ---> 418176000000070000
$diff ---> Array ( [0] => 418176000000070000 [1] => 418176000000060000 )
所以,在这种情况下,结果是正确的!in_array
因此,通过将第三个参数设置为strict
in_array()
in_array()
true
if(in_array($lead,$diff,true)) //use type too
echo "Found";
else
echo "Not found";
?>
试试这个。它会起作用。