为什么php数组的整数键变为负数(< 0)?

时间:2015-07-03 09:18:43

标签: php array-filter

var_dump(array_filter(array(4294967295 => 22)));

结果:

array(1) {  
    [-1] =>  
    int(22)
}

为什么密钥是< 0?

2 个答案:

答案 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溢出,然后-21474836482147483649变为-2147483647等等......

您的号码4294967295最终以-1结束。

这一切都发生了,因为在计算机科学中,我们使用Two's Complement来表示小于0的数字。这在现实生活中没有意义,但对于计算机而言,二重补充更容易,更快速地计算。

对于您的问题,您可以将PHP更改为64位版本。或者通过不使用>的数字绕过它。在这种情况下是PHP_INT_MAX。