为什么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。第一个版本我说的是正确的数字,但编辑后,我错误地把错误的数字放在那里。