編集: 私は自分の問題のデモを作成しました: 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] = "こんにちは";
になる
$optionsAsArray[-2147483648] = "hi";
データベースのIDに関連付けられているため、インデックスを2147483648にする必要があります
このコードはすでにクライアントに出荷されており、ロジックは多くの場所で使用されているため、すべてのインスタンスを変更することは不可能です。
$optionsAsArray[strVal(2147483648)] = "hi";
文字列型を連想配列のキーとして使用することで、正しく実行できるようにします。
この場合の最善の解決策は何ですか? この問題を回避するために、すべての php 配列が文字列をキーとして使用するように強制するためのグローバル設定オプションはありますか?