PHP数组:有没有办法强制所有数组键都是字符串?

时间:2012-06-14 17:43:38

标签: php arrays overflow

编辑:我已针对我的问题进行了演示: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] =“hi”;

  2. 变为

    $optionsAsArray[-2147483648] = "hi";
    

    我需要索引为2147483648,因为它与数据库中的ID绑定

    1. 此代码已经发送到客户端,并且逻辑在许多地方使用,使得将每个实例修改为

      是不可行的

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

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

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

1 个答案:

答案 0 :(得分:1)

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