我需要检查参数(字符串或者int或者float)是否是一个“大”整数. “大整数”我的意思是它没有小数位,可以超过
PHP_INT_MAX.它被用作msec时间戳,内部表示为float.
ctype_digit想到但强制字符串类型.作为辅助检查的is_int限制为PHP_INT_MAX范围,is_numeric将接受带小数位的浮点,这是我不想要的.
依靠这样的东西是安全的,还是有更好的方法:
if (is_numeric($val) && $val == floor($val)) { return (double) $val; } else ...
所以基本上你想检查一个特定的变量是否是整数的?
function isInteger($var) { if (is_int($var)) { // the most obvIoUs test return true; } elseif (is_numeric($var)) { // cast to string first return ctype_digit((string)$var); } return false; }
请注意,使用浮点变量来保持较大的整数将失去精度,并且当足够大时将变成一个分数,例如9.9999999999991E 36,这显然会失败上述测试.
如果给定环境(32位或64位)的值超过INT_MAX,我建议使用gmp,并以字符串格式持久保留数字.