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

tan*_*eng 3 php array-filter

var_dump(array_filter(array(4294967295 => 22)));
Run Code Online (Sandbox Code Playgroud)

结果:

array(1) {  
    [-1] =>  
    int(22)
}
Run Code Online (Sandbox Code Playgroud)

为什么键是<0?

Ana*_*Die 6

最大尺寸int如下: -

PHP的32位版本:

Integers can be from -2147483648 to 2147483647
Run Code Online (Sandbox Code Playgroud)

PHP的64位版本:

Integers can be from -9223372036854775808 to 9223372036854775807
Run Code Online (Sandbox Code Playgroud)

看来你正在使用32位版本,这就是你遇到这个问题的原因.


Env*_*vil 6

这是因为算术溢出.因为PHP中的最大整数是PHP_INT_MAX,只有2147483647(32位).

所以"所谓的"号码2147483648溢出然后会来-2147483648,2147483649变成-2147483647等等......

你的号码4294967295最终以-1结尾.

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

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