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

为什么php数组的整数键变为负(<;0)?,php,array-filter,Php,Array Filter,结果是: var_dump(array_filter(array(4294967295 => 22))); 为什么键是PHP_INT_MAXFor info,PHP_INT_MAX是2147483647(您的值是4294967295)2147483647是2^31-1,这是最大的32位INT值,而不是64@LưuVĩnhPhúc:than kiu:v。第一个版本我说的是正确的数字,但编辑后,我错误地把错误的数字放在那里。

结果是:

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

为什么键是<0?

int的最大大小如下所示:-

PHP的32位版本:

array(1) {  
    [-1] =>  
    int(22)
}
Integers can be from -2147483648 to 2147483647
64位PHP版本:

array(1) {  
    [-1] =>  
    int(22)
}
Integers can be from -2147483648 to 2147483647
看起来您使用的是32位版本,这就是为什么会出现这个问题。

这是因为。因为PHP中最大的整数是
PHP\u INT\u MAX
,它只有
2147483647
(32位)

因此,“所谓”号码
2147483648
溢出,然后将出现
-2147483648
2147483649
变为
-2147483647
,依此类推

您的号码
4294967295
最终为-1。

这一切之所以发生,是因为在计算机科学中,我们用来表示小于0的数字。这在现实生活中没有意义,但对计算机来说,二的补码计算起来更容易、更快


对于您的问题,您可以将PHP更改为64位版本。或者在本例中不使用大于PHP_INT_MAX的数字来绕过它。

因为您试图设置一个整数key>PHP_INT_MAXFor info,PHP_INT_MAX是2147483647(您的值是4294967295)2147483647是2^31-1,这是最大的32位INT值,而不是64@LưuVĩnhPhúc:than kiu:v。第一个版本我说的是正确的数字,但编辑后,我错误地把错误的数字放在那里。