1

非常に大きな主キー (12 桁) を含むデータを扱っています。フォームの配列にデータを入れようとするとid => value、インデックスが正しく割り当てられません。

$test = array(190337172011 => 'Apple');
print_r($test);

結果:

Array ( [1358610987] => Apple ) 

場合によっては、負の数になることさえあります。なぜこれが起こるのですか?バグですか?

IIS で PHP 5.3.10 を実行しています。

4

2 に答える 2

2

整数のサイズはプラットフォームに依存しますが、最大値は約 20 億が通常の値です (符号付き 32 ビット)。通常、64 ビット プラットフォームの最大値は約 9E18 です。PHP は符号なし整数をサポートしていません。PHP 4.4.0 および PHP 5.0.5 以降では、整数サイズは定数 PHP_INT_SIZE を使用して決定でき、最大値は定数 PHP_INT_MAX を使用して決定できます。

ソース: http://php.net/manual/en/language.types.integer.php

于 2012-04-29T01:41:54.530 に答える
0

おそらく 32 ビットの Windows オペレーティング システム (Windows XP など) で 32 ビットの PHP バージョンを使用しています。

数値配列インデックスの場合、PHP は整数変数型を使用してキーを格納します。それらは限られています。この制限は、PHP のバージョンとオペレーティング システムに応じて、最大値またはターンアラウンドのいずれかをトリガーする制限よりも大きい値を選択した場合に表示されます。

190337172011がシステムの整数型には大きすぎます。そのため、ラウンドトリップで上限を取得し、結果は1358610987. ラウンドトリップとは、可能な最大の正の数の後に、次の数が可能な限り最小の数であることを意味します。これは、表現できる「最大の」負の数です。そのため、負の数も取得します。

値を文字列キーとして保存することで回避できます。これには事前に修正が必要です。

$test = array('ID' . 190337172011 => 'Apple');
print_r($test);

これは通常、コードの移植性を高めるのに十分です。好きなように任意の文字列プレフィックスを選択できますが、IDこれは単なる例ですが、少なくとも 1 つの数字以外の文字が必要です。

于 2012-04-29T11:10:57.197 に答える