gpt4 book ai didi

php - 为什么 in_array() 使用这些(大数字)字符串错误地返回 true?

转载 作者:IT王子 更新时间:2023-10-29 00:01:04 25 4
gpt4 key购买 nike

我不明白这段代码有什么问题。它返回“已找到”,它不应该返回。

$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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com