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?
最大尺寸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位版本,这就是你遇到这个问题的原因.
这是因为算术溢出.因为PHP中的最大整数是PHP_INT_MAX,只有2147483647(32位).
所以"所谓的"号码2147483648溢出然后会来-2147483648,2147483649变成-2147483647等等......
你的号码4294967295最终以-1结尾.
这一切都发生了,因为在计算机科学中,我们使用Two's Complement来表示小于0的数字.这在现实生活中没有意义,但对于计算机而言,Two的补码更容易,更快速地计算.
对于您的问题,您可以将PHP更改为64位版本.或者在这种情况下不使用> PHP_INT_MAX的数字来绕过它.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |