在接支付SDK的时候,第三方回调处理时需要IP,并且IP的需求是:去掉点号,补零到每地址段3位, 如:192168000001
先看看我的实现:
1 <?php 2 $IP = explode ( '.', '192.168.1.12' ); 3 $NewIP=""; 4 for($i = 0; $i < count ( $IP ); $i ++) { 5 $NewIP.=str_pad ( $IP [$i], 3, "0", STR_PAD_LEFT ); 6 } 7 echo $NewIP; 8 ?>
结果:192168001012
php 中有两个函数,能够实现数字补零格式化,str_pad(),sprintf()
现在分别对这两个函数进行详细分析一下:
1:str_pad
顾名思义,str_pad是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串
例如:str_pad(需要填补的字符串,填补后的长度,填补字符串,填补位置)
其中填补后的长度必须是个正整数,填补位置有三个选项:
左边:STR_PAD_LEFT,
右边:STR_PAD_RIGHT,
两端:STR_PAD_BOTH
例如:
echo str_pad(1,8,”0″,STR_PAD_LEFT);
结果:00000001
echo str_pad(1,8,”0″,STR_PAD_RIGHT);
结果:10000000
echo str_pad(1,8,”0″,STR_PAD_BOTH);
结果:00010000
在上边的例子中值得注意的一个细节是,如果填补的位数是个奇数,例如例三中填补了7个0,右边优先。
2:sprintf
a:左边补零
echo sprintf(”%05d”,1);
先说%05d的意思,用一个5位数的数字格式化后边的参数,如果不足5位就补零
运行结果是00005
b:小数点后补零
echo sprintf(”%01.3f”,1);
%01.3f的意思是说,用一个小数点后最少三位不足三位补零,小数点前最少一位,不足一位补零的浮点数格式化后边的参数
其运行结果是:1.000
关于补零的这两种方法大家可以挑选着使用,其实各有优劣,sprintf能够保证你不至于误操作吧1补成1000000哈哈,str_pad可以保证你想补啥补啥。
再来一个小例子:
1 <?php 2 function formatNum($arrayName) 3 { 4 for($i=0;$i<count($arrayName);$i++) 5 { 6 $res[$i]='PQ'.str_pad ($arrayName[$i], 6, "0", STR_PAD_LEFT ); 7 } 8 return $res; 9 } 10 $arrayName = array(1,2,3,4,5,6,7,8,9,10,11,12,13); 11 $result=formatNum($arrayName); 12 var_dump($result);