编辑:我已针对我的问题进行了演示:http://codepad.org/ByNdAdCI
我们使用以下逻辑在32位php中设置数组:
private function formatAvailableOptions($availableOptions) {
$optionsAsArray = array();
foreach($availableOptions as $option){
$optionsAsArray[$option["entity_id"]] = $option["name"];
}
return $optionsAsArray;
}
问题:
$option["entity_id"]
变得太大而不适合32位int,因此在创建$optionsAsArray
时会溢出。例如
$ optionsAsArray [2147483648] =“hi”;
变为
$optionsAsArray[-2147483648] = "hi";
我需要索引为2147483648,因为它与数据库中的ID绑定
此代码已经发送到客户端,并且逻辑在许多地方使用,使得将每个实例修改为
是不可行的 $optionsAsArray[strVal(2147483648)] = "hi";
通过使用字符串类型作为关联数组的键来使其正常运行。
在这种情况下,最佳解决方案是什么?我是否有一个全局配置选项强制所有php数组使用字符串作为解决此问题的键?
答案 0 :(得分:1)
似乎,它不喜欢浮点数作为键;)因此,浮动类型转换失败。您已在问题(strVal($var)
或(string) $var
或"$var"
)中提及了您的解决方案。如果您的客户以64位运行PHP(他们应该这样做),他们看不出任何差异。因为这显然是一个错误,您应该考虑修复它并向客户发布更新。没有选项或设置可以动态地将32位安装转换为64位安装。