我有一个电话号码,它将被记录为整数(例如1234512312345)在我的数据库中,但我想在网页上表示为(12345)123-12345。如果它是一个字符串,我会使用substr,但似乎将其转换为strval不太优雅。
虽然我知道整数和字符串在分类上是不同的,但是否有一种方法可以做到这样的效果,而不编写一个效率低下的函数?
我有一个电话号码,它将被记录为整数(例如1234512312345)在我的数据库中,但我想在网页上表示为(12345)123-12345。如果它是一个字符串,我会使用substr,但似乎将其转换为strval不太优雅。
虽然我知道整数和字符串在分类上是不同的,但是否有一种方法可以做到这样的效果,而不编写一个效率低下的函数?
注意:因为标题而回答,将电话号码视为整数并不是一个好主意
你应该利用PHP的类型强制转换能力,使用字符串函数处理你的电话号码,但如果你想要以C语言的方式继续使用整数,则有以下选项:
/
运算符用于除法,可用于获取前几位数字(将123
除以100
可以得到第一个数字,但不能直接得出,因为123/100=1.23
,使用floor()
函数将得到floor(123/100)=1
,但这里可能会有问题,因为floor()
函数的结果是float
类型而不是integer
类型)%
运算符用于取模,可用于获取最后几位数字(123
对10
取模将立即给出最后一位数字,并且是integer
类型,例如,123%10=3
)$last=$no%100000; // get last 5 digits (modulo by 1 followed by 5 zeroes)
$no=$no-$last; // subtract the last digits from original number
$no=$no/100000; // divide to shorten the number, end up with a natural number
$area=$no%1000; // get last 3 again
$prefix=($no-$area)/1000; //remainder is the first digits of the original number
float
/double
/real
方式)- 只是更易读:$last=$no%1e5; // scientific notation 1e5 = 10000 (1 followed by 5 zeroes)
$no=($no-$last)/1e5;
$area=$no%1e3;
$prefix=($no-$area)/1e3;
实时代码: http://codepad.viper-7.com/tVRjXC
注意:科学计数法e
使用类型float
您还应该记住,32位平台上的最大整数是2^31 = 2.147.483.648
0077705501234
的“电话号码”,将会让您头疼!
所以它来自数据库,但如果出现真正的int
,PHP将会将任何前导数字为八进制基数的0
内部转换为十进制,因此您最终会得到完全不同的“电话号码”,确切地说是垃圾。
如果PHP将其作为字符串接收,而您确实希望使用整数进行操作,则可以使用(int) $no
进行type-cast,或者使用$no+0
进行转换等。
总之,对于整数来说,前导零并不重要,但对于字符串来说却很重要,因此您可能会得到 77705501234
这样的结果,您可能需要进行长度检查(采用整数 浮点方式):
我选择浮点数方法进行计算,因为有太多的零需要计算...
我们知道该数字必须有 13
位数,因此我们可以检查 if ( $no > 1e12 )
并且可能还要检查 if ( $no < 1e14 )
以进行验证。
如果您还想知道数字的“长度”(您需要了解 pow() ):
for ($i=1;$i<13;$i++) { //count from 1 to 12
//stop when $no modulo 10^$i is the number
if ( $no % pow(10,$i) == $no ) break;
}
// number of digits of $no are stored in $i - equivalent to strlen()
printf('Your number: (%05u) %03u - %05u',$prefix,$area,$last);
实时代码:http://codepad.viper-7.com/Xgr8RQ
侧面说明:对于大数字,您还可以使用BCMath函数,但它们使用字符串。strval()
将您的数字转换为字符串,然后可以在其上使用substr()
和所有其他字符串函数。<?php
$data = 1234512312345;
echo "(".substr($data, 0, 5).") ".substr($data, 5, 3)."-".substr($data,8);
?>
这只是用于网页展示吗?
如果是的话,您可以使用一个jQuery插件来完成。
对我来说最好的是:
试试这个...
<?php
$phone = "1234512312345";
//(12345) 123 - 12345
$array = str_split($phone,5);
$array1 = substr($phone,5, 3);
$array2 = substr($phone,8, 5);
echo "(".$array[0].") ".$array1."-".$array2;
?>