0

编辑:我对我的问题做了一个演示:http: //codepad.org/ByNdAdCI

我们使用以下逻辑在 32 位 php 中设置我们的数组:

    private function formatAvailableOptions($availableOptions) {
    $optionsAsArray = array();
    foreach($availableOptions as $option){
        $optionsAsArray[$option["entity_id"]] = $option["name"];
    }
    return $optionsAsArray;
}

问题:

  1. $option["entity_id"]已经变得太大而无法适应 32 位 int,因此在创建时会$optionsAsArray溢出。例如

    $optionsAsArray[2147483648] = "嗨";

变成

$optionsAsArray[-2147483648] = "hi";

我需要索引为 2147483648,因为它与数据库中的 id 相关联

  1. 此代码已交付给客户端,并且该逻辑在许多地方都使用,因此无法修改每个实例以

    $optionsAsArray[strVal(2147483648)] = "hi";

通过使用字符串类型作为关联数组的键使其正常运行。

在这种情况下,最好的解决方案是什么?是否有一个全局配置选项让我强制所有 php 数组使用字符串作为键来解决这个问题?

4

1 回答 1

1

似乎,它不喜欢浮点数作为键;)所以类型转换为浮点数失败。您已经在问题中提到了您的解决方案(strVal($var),或(string) $var,或只是"$var")。如果您的客户在 64 位中运行 PHP(他们应该这样做;))他们看不到任何区别。因为这显然是一个错误,您应该考虑修复它并向您的客户发布更新。没有任何选项或设置可以即时将 32 位安装转换为 64 位安装。

于 2012-06-14T18:07:24.970 回答