我有一个电话号码,它将在我的数据库中记录为整数(例如 1234512312345),但我想在网页上表示为 (12345) 123 - 12345。如果它是一个字符串,我会使用 substr,但将它转换为 strval 似乎不太优雅。
虽然我很欣赏整数和字符串在分类上是不同的,但有没有办法在不自己编写效率较低的函数的情况下做到这一点?
注意:因为标题而回答这个问题,将电话号码视为整数不是一个好主意
您应该利用 PHP 的类型杂耍功能并在电话号码上使用字符串函数,但如果您想使用C风格并保持使用整数,您有:
/
运算符,有助于获取第一个数字(除法会给你第一个数字,但不是马上,因为,使用该函数会给你,但我们在这里可能会遇到问题,因为's 结果是类型而不是)123
100
123/100=1.23
floor()
floor(123/100)=1
floor()
float
integer
%
运算符,有助于获取最后一位数字(模数会立即为您提供最后一位数字,并且是整数类型,例如。)123
10
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 将它作为 a 接收,string
并且您真的想使用整数,您可以使用类型(int) $no
转换或转换$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;
?>