在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_padsprintf
如果input可以有任何长度,那么你也可以使用

 $str = substr('00000000' . $input, -8); 

这并不像其他的那么快,但也应该比str_padsprintf快一点。

顺便说一句:我的testing还表示, sprintfstr_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++; }