我不明白这段代码有什么问题。它返回“已找到”,它不应该返回。
$lead = "418176000000069007";
$diff = array("418176000000069003","418176000000057001");
if (in_array($lead,$diff))
echo "Found";
else
echo "Not found";
最佳答案
注意:此行为在 PHP 5.4 中已更改。
默认情况下,in_array
使用松散比较 (==
),这意味着将数字字符串转换为数字并作为数字进行比较。在 PHP 5.4 之前,如果您的平台的浮点类型没有足够的精度,就会丢失差异并得到错误的答案。
一种解决方案是通过向 in_array传递一个额外的
:Boolean
参数来打开 strict
比较 (===
)
$lead = "418176000000069007";
$diff = array("418176000000069003", "418176000000057001");
if ( in_array($lead, $diff, true) )
echo "Found";
else
echo "Not found";
然后将字符串作为没有数字强制的字符串进行比较。但是,这意味着您确实会丢失“01234”和“1234”等字符串的默认等效性。
此行为 was reported as a bug并在 PHP 5.4 中修复。与 ==
相比,数字字符串仍会转换为数字,但前提是字符串的值适合平台的数字类型。
关于php - 为什么 in_array() 使用这些(大数字)字符串错误地返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408740/