我正在处理涉及非常大的主键(12 位)的数据。当我尝试将数据放入表单中的数组时id => value
,索引未正确分配。
$test = array(190337172011 => 'Apple');
print_r($test);
结果:
Array ( [1358610987] => Apple )
有时它甚至会导致负数。为什么会这样?它是一个错误吗?
我在 IIS 上运行 PHP 5.3.10。
整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。64 位平台的最大值通常约为 9E18。PHP 不支持无符号整数。自 PHP 4.4.0 和 PHP 5.0.5 起,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。
您在可能是 32 位 Windows 操作系统(例如 Windows XP)上使用 32 位 PHP 版本。
对于数值数组索引,PHP 使用整数变量类型来存储键。这些是有限的。如果您选择的值大于限制,则此限制变得可见,这将根据 PHP 版本和操作系统触发最大值或周转。
您的系统上的整数类型的值190337172011
太大,这就是为什么您通过往返获得上限,结果为1358610987
. 往返意味着,在可能的最大正数之后,下一个数字是可能的最小数,即可以表示的“最大”负数。这就是为什么你也会得到负数。
您可以通过将值存储为需要一些预先修复的字符串键来解决此问题:
$test = array('ID' . 190337172011 => 'Apple');
print_r($test);
这通常足以使您的代码更具可移植性。您可以根据需要选择任何字符串前缀,ID
这只是示例,但您至少需要一个非数字字符。