编辑:我已经对我的问题做了一个演示: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 数组使用字符串作为键来解决此问题?
似乎,它不喜欢浮点作为键;)因此,强制转换为浮点的类型失败。您已经在问题中提到了您的解决方案(strVal($var)
,或(string) $var
,或只是"$var"
)。如果您的客户以 64 位运行 PHP(他们应该;)),他们看不到任何区别。因为这显然是一个错误,您应该考虑修复它并向您的客户发布更新。没有选项或设置可以即时将 32 位安装转换为 64 位安装。