我在更改我身上键值的数组时遇到问题。在下面我提供的示例中,它开始正常,但在某些时候 php 将我的字符串转换为整数并在将其作为键插入另一个数组时更改该整数。
Code
-----------------
$fund = '01';
$division = '1';
$gl_transactions[$fund] = array();
$glint = array($division=>array('gl_cash_account'=>'1800001040000000'));
print chr(10).'1:'.chr(10);
print_r($glint);
$gl = $glint[$division]['gl_cash_account'];
print chr(10).'2:'.chr(10);
print $gl;
$gl_transactions[$fund][$gl]['description'] = 'MTS DISBURSEMENTS';
print chr(10).'3:'.chr(10);
print_r($gl_transactions);
Expected output
---------------
1:Array([1] => Array([gl_cash_account] => 1800001040000000 ))
2:1800001040000000
3:Array([01] => Array([1800001040000000] => Array([description] => MTS DISBURSEMENTS)))
Actual output
---------------
1:Array([1] => Array([gl_cash_account] => 1800001040000000 ))
2:1800001040000000
3:Array([01] => Array([1721082880] => Array([description] => MTS DISBURSEMENTS)))
注意索引从 1800001040000000 变为 1721082880
障碍物
这些大数字是总账科目编号,不能更改为较小的数字。我们的产品中有数以万计的代码,超过一百万行代码,并且无法通过每一点来找到可能存在问题的地方并重写它。这只是我们在许多地方所做的事情的一个通用示例,使用数据库中的数据构建多维数组。我可以在插入数组时简单地将变量转换为字符串来修复上述示例,但回填 1M+ 行代码不是一个可行的选择。
在我的开发机器上,我运行 php 5.3 MSSQL、Windows 和 IIS。上面的代码我没有得到这个错误,但是当我简单地将一个变量设置为一个整数然后将它作为一个键插入到一个数组中时,我确实得到了它。即$gl = 1800001040000000;$ar[$gl] = 1; print_r($ar); 现在我们不会在我们的软件中将变量转换为整数,但在第一个示例中,当 PHP 在我们的某些客户端系统上运行时构建最后一个数组时,它会在某个时刻自行转换它。
所以我的问题是:
- 数字数组键的确切限制是什么。
- 有没有办法增加这个。
- 这在 5.2 之后的 php 更高版本中是否已修复或增加
其他注意事项
我们的软件适用于多种数据库、多种浏览器、window 和 linux、apache 和 IIS。我们有数百名客户在使用该软件,他们都有自己独特的设置。我们的大多数客户目前都在使用 php 5.2,由于我们的软件中使用了已弃用的功能,因此目前无法升级它们。