一. intval() 和 (int)
在php中,intval()方法与(int)一样能把字符串格式转成整形,两种方式没什么区别。
二. 边界值
在代码中我将接收的手机号码用intval()转成整形,发现返回的整形数据都变成一个值:
var_dump(intval('13800138000'));// int 2147483647
之前从来没发生过这种事情,为何intval调皮了,于是查了一下intval(),发现这个值是int的边界值。
1.在32位的系统环境下,intval边界值是-2147483648到2147483647;
2.在64位的系统环境下,intval边界值是-9223372036854775808到9223372036854775807;
仔细地回想了一下,之前一直在64位系统下开发,11位的手机号码并不超过其边界值,所以没注意过这个问题,而现在用着的是32位系统,本地一玩就出问题了,涨姿势。
考虑了一下,发现id之类的一些不超过2147483647的数据用intval()还是不错的,若是长一些的数字如qq号码,手机号码等还是得用其他方法获取好些,正则式取数值:
function getNum($str, $default = 0){
return preg_match('/[\d]+/', $str, $int) ? $int[0]: $default;
}
$str = '13800138000';
var_dump(getNum($str)); //string '13800138000' (length=11)
只要能解决,用什么方式都是可以的。