が 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
この記事へのコメント