% php -r '$nums = array(2147483647, 2147483648, 2147483649, -2147483647, -2147483648, -2147483649); var_dump($nums, array_map("intval", $nums));' array(6) { [0]=>int(2147483647) [1]=>float(2147483648) [2]=>float(2147483649) [3]=>int(-2147483647) [4]=>float(-2147483648) [5]=>float(-2147483649) } array(6) { [0]=>int(2147483647) [1]=>int(-2147483648) [2]=>int(-2147483647) [3]=>int(-2147483647) [4]=>int(-2147483648) [5]=>int(-2147483648) }
何でこんな仕様なのか、分からないではないけどやっぱりキモい... float(2147483648) が int(-2147483648) にキャストされることなんか知っておかないと絶対ハマる。
PHP にも組み込み型として任意精度実数 (numeric) 型と複素数 (complex) 型がほしいなあ。
あと基本型のタイプヒンティング。