1

我正在处理涉及非常大的主键(12 位)的数据。当我尝试将数据放入表单中的数组时id => value,索引未正确分配。

$test = array(190337172011 => 'Apple');
print_r($test);

结果:

Array ( [1358610987] => Apple ) 

有时它甚至会导致负数。为什么会这样?它是一个错误吗?

我在 IIS 上运行 PHP 5.3.10。

4

2 回答 2

2

整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。64 位平台的最大值通常约为 9E18。PHP 不支持无符号整数。自 PHP 4.4.0 和 PHP 5.0.5 起,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。

来源: http: //php.net/manual/en/language.types.integer.php

于 2012-04-29T01:41:54.530 回答
0

您在可能是 32 位 Windows 操作系统(例如 Windows XP)上使用 32 位 PHP 版本。

对于数值数组索引,PHP 使用整数变量类型来存储键。这些是有限的。如果您选择的值大于限制,则此限制变得可见,这将根据 PHP 版本和操作系统触发最大值或周转。

您的系统上的整数类型的值190337172011太大,这就是为什么您通过往返获得上限,结果为1358610987. 往返意味着,在可能的最大正数之后,下一个数字是可能的最小数,即可以表示的“最大”负数。这就是为什么你也会得到负数。

您可以通过将值存储为需要一些预先修复的字符串键来解决此问题:

$test = array('ID' . 190337172011 => 'Apple');
print_r($test);

这通常足以使您的代码更具可移植性。您可以根据需要选择任何字符串前缀,ID这只是示例,但您至少需要一个非数字字符。

于 2012-04-29T11:10:57.197 回答