2011年10月06日

PHP:array_key_exists のバグ?

array_key_exists('2147483647', array(2147483647 => 1));

が true にならない……。(バグ?)
知っての通り array_key_exists は strict ではない。
ということで、2147483647 から 1 を引いた

array_key_exists('2147483646', array(2147483646 => 1));

では true になる。(期待通り)
そこで、面白いことに

array_key_exists('-2147483647', array(-2147483647 => 1));

も true。(期待通り)
これは 32bit 版固有の問題で、整数型の取りうる範囲が-2147483647〜2147483647までだから、「2147483647」という値に起こったのだと思う。これは既知のバグなのだろうか? 徹夜の追い込み中で調べる気力がないので、ここでメモw

一応調査した環境は
CPI Linux, php 5.1.6
Xserver Linux, php 5.1.6
XREA Linux, php 5.2.5
Windows, php 5.2.4

SAKURA FreeBSD, php 5.2.17

ただし! 最後の SAKURA は期待通り true になった! ふぅ。なんじゃそりゃ^^;;; php 5.3以上ではどうだろう。誰か知ってる人コメください。
ところで整数型で -2147483648 を作るには……

var_dump(-2147483647); // int -2147483647 <-- int 扱い
var_dump(-2147483648); // float -2147483648 <-- float 扱い
var_dump(1073741824 << 1); // int -2147483648 <-- int になったw


posted by HiFa at 05:10 | 愛知 ☔ | Comment(0) | TrackBack(0) | ときどきPHP | このブログの読者になる | 更新情報をチェックする
>>> スパムコメントは消してますよん。 お互い無駄な労力は避けましょう。 <<<

この記事へのコメント

コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック