var_dump(array_filter(array(4294967295 => 22)));
结果:
array(1) {
[-1] =>
int(22)
}
为什么密钥是< 0?
答案 0 :(得分:6)
int
的最大尺寸如下: -
PHP的32位版本:
Integers can be from -2147483648 to 2147483647
PHP的64位版本:
Integers can be from -9223372036854775808 to 9223372036854775807
您似乎正在使用32位版本,这就是您遇到此问题的原因。
答案 1 :(得分:6)
这是因为Arithmetic overflow。由于PHP中的最大整数是PHP_INT_MAX
,因此只有2147483647
(32位)。
所以“所谓的”号码2147483648
溢出,然后-2147483648
,2147483649
变为-2147483647
等等......
您的号码4294967295
最终以-1结束。
这一切都发生了,因为在计算机科学中,我们使用Two's Complement来表示小于0的数字。这在现实生活中没有意义,但对于计算机而言,二重补充更容易,更快速地计算。
对于您的问题,您可以将PHP更改为64位版本。或者通过不使用>的数字绕过它。在这种情况下是PHP_INT_MAX。