キーの値を変更する配列に問題があります。以下に提供する例では、最初は問題ありませんが、ある時点でphpが文字列を整数に変換し、キーとして別の配列に挿入するときにその整数を変更しています。
Code
-----------------
$fund = '01';
$division = '1';
$gl_transactions[$fund] = array();
$glint = array($division=>array('gl_cash_account'=>'1800001040000000'));
print chr(10).'1:'.chr(10);
print_r($glint);
$gl = $glint[$division]['gl_cash_account'];
print chr(10).'2:'.chr(10);
print $gl;
$gl_transactions[$fund][$gl]['description'] = 'MTS DISBURSEMENTS';
print chr(10).'3:'.chr(10);
print_r($gl_transactions);
Expected output
---------------
1:Array([1] => Array([gl_cash_account] => 1800001040000000 ))
2:1800001040000000
3:Array([01] => Array([1800001040000000] => Array([description] => MTS DISBURSEMENTS)))
Actual output
---------------
1:Array([1] => Array([gl_cash_account] => 1800001040000000 ))
2:1800001040000000
3:Array([01] => Array([1721082880] => Array([description] => MTS DISBURSEMENTS)))
インデックスが 1800001040000000 から 1721082880 に変更されたことに注意してください
障害物
これらの大きな数字は G/L 口座番号であり、小さな数字に変更することはできません。私たちの製品には何万ものコードがあり、100 万行を超えるコードがありますが、そのすべてを調べて問題の可能性がある場所を見つけて書き直すことはできません。これは、データベースのデータを使用して多次元配列を構築するという、私たちが多くの場所で行っていることの単なる一般的な例です。上記の例を修正するために、配列に挿入するときに変数を文字列として単純にキャストできますが、1M 以上のコード行をバックフィルすることは実行可能なオプションではありません。
私の開発マシンでは、php 5.3 MSSQL、Windows、および IIS を実行しています。上記のコードではこのエラーは発生しませんが、単に変数を整数として設定し、それをキーとして配列に挿入すると発生します。つまり、$gl = 1800001040000000; $ar[$gl] = 1; print_r($ar); 現在、ソフトウェアで変数を整数にキャストしませんが、最初の例では、php は、一部のクライアント システムで実行されたときに、最後の配列を構築している時点で変数を独自に変換します。
だから私の質問は:
- 数値配列キーの正確な制限は?
- これを増やす方法はありますか?
- これは、5.2 以降の php の新しいバージョンで修正または増加されましたか?
その他の注意事項
当社のソフトウェアは、複数のデータベース、複数のブラウザ、window と linux、apache と IIS で動作します。何百人ものお客様が独自のセットアップでソフトウェアを使用しています。現在、ほとんどのお客様は php 5.2 を使用しており、ソフトウェアで使用されている機能が非推奨になっているため、現時点ではアップグレードできません。