在PHP中用前导零来格式化一个数字
我有一个variables,其中包含值1234567
。
我希望它包含正好8位数,即01234567
。
有一个PHP函数呢?
使用sprintf
:
sprintf('%08d', 1234567);
另外,你也可以使用str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
鉴于该值是$值:
-
回声:
printf("%08d", $value);
-
为拿到它,为实现它:
$formatted_value = sprintf("%08d", $value);
这应该够了吧
虽然我不确定你想要做什么,但你可能正在寻找sprintf 。
这将是:
$value = sprintf( '%08d', 1234567 );
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
sprintf
是你所需要的。
编辑( 不知何故由downvotes要求 ),从上面链接的页面,这里是一个示例“零填充整数”:
<?php $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day); ?>
简单的答案
$p = 1234567; $p = sprintf("%08d",$p);
我不确定如何解释“永远不会超过8位数”的意见,如果是指的是input或输出。 如果它引用输出,你将不得不有一个额外的substr()调用剪辑string。
剪辑前8位数字
$p = substr(sprintf('%08d', $p),0,8);
剪辑最后8位数字
$p = substr(sprintf('%08d', $p),-8,8);
当我需要01而不是1时,以下工作适合我:
$number = 1; $number = str_pad($number, 2, '0', STR_PAD_LEFT);
如果input的数字总是有7或8位数字,也可以使用
$str = ($input < 10000000) ? 0 . $input : $input;
我跑了一些testing,得到这将是双倍的速度str_pad
或sprintf
。
如果input可以有任何长度,那么你也可以使用
$str = substr('00000000' . $input, -8);
这并不像其他的那么快,但也应该比str_pad
和sprintf
快一点。
顺便说一句:我的testing还表示, sprintf
比str_pad
快一点。 我用PHP 5.6做了所有的testing。
我写了这个简单的函数来产生这种格式:01:00:03
总是显示秒(即使为零)。 如果大于零或需要小时或天,则会显示分钟数。 如果大于零或需要天数,则显示小时数。 如果大于零,则显示天数。
function formatSeconds($secs) { $result = ''; $seconds = intval($secs) % 60; $minutes = (intval($secs) / 60) % 60; $hours = (intval($secs) / 3600) % 24; $days = intval(intval($secs) / (3600*24)); if ($days > 0) { $result = str_pad($days, 2, '0', STR_PAD_LEFT) . ':'; } if(($hours > 0) || ($result!="")) { $result .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ':'; } if (($minutes > 0) || ($result!="")) { $result .= str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':'; } //seconds aways shown $result .= str_pad($seconds, 2, '0', STR_PAD_LEFT); return $result; } //funct
例子:
echo formatSeconds(15); //15 echo formatSeconds(100); //01:40 echo formatSeconds(10800); //03:00:00 (mins shown even if zero) echo formatSeconds(10000000); //115:17:46:40
这工作看点: $number = 13246; echo sprintf( '%08d', $number );
$number = 13246; echo sprintf( '%08d', $number );
$sl=1; while ($sl<13) { $str = ($sl < 10) ? 0 . $sl : $sl; $sql="SELECT login_time FROM hcm_attendance_".$str; $sl++; }