在PHP中使用前导零格式化数字

时间:2009-11-09 09:25:02

标签: php numbers format

我有一个包含值1234567的变量。

我希望它包含8个数字,即01234567

是否有PHP功能?

14 个答案:

答案 0 :(得分:1071)

使用sprintf

sprintf('%08d', 1234567);

或者您也可以使用str_pad

str_pad($value, 8, '0', STR_PAD_LEFT);

答案 1 :(得分:76)

鉴于该值为$ value:

  • 回应它:

    printf("%08d", $value);

  • 要获得它:

    $formatted_value = sprintf("%08d", $value);

应该做的伎俩

答案 2 :(得分:24)

echo str_pad("1234567", 8, '0', STR_PAD_LEFT);

答案 3 :(得分:21)

当我需要01而不是1时,以下内容对我有用:

$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);

答案 4 :(得分:17)

虽然我不确定你想做什么,但你可能正在寻找sprintf

这将是:

$value = sprintf( '%08d', 1234567 );

答案 5 :(得分:14)

sprintf就是您所需要的。

编辑(以某种方式请求downvotes ),从上面链接的页面,这里是一个示例“零填充整数”:

<?php
    $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>

答案 6 :(得分:13)

简单回答

$p = 1234567;
$p = sprintf("%08d",$p);

我不确定如何解释评论说“它永远不会超过8位”,如果它指的是输入或输出。如果它引用输出,则必须进行额外的substr()调用以剪切字符串。

剪辑前8位

$p = substr(sprintf('%08d', $p),0,8);

剪辑最后8位

$p = substr(sprintf('%08d', $p),-8,8);

答案 7 :(得分:6)

如果输入的数字始终为7位或8位,您也可以使用

$str = ($input < 10000000) ? 0 . $input : $input;

我进行了一些测试,得到的结果是str_padsprintf的两倍。 如果输入可以有任何长度,那么您也可以使用

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

这不如另一个快,但也应该比str_padsprintf快一点。

顺便说一句:我的测试还说sprintfstr_pad快一点。我用PHP 5.6进行了所有测试。

答案 8 :(得分:1)

我写了这个简单的函数来生成这种格式: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 

答案 9 :(得分:0)

$no_of_digit = 10;
$number = 123;

$length = strlen((string)$number);
for($i = $length;$i<$no_of_digit;$i++)
{
    $number = '0'.$number;
}

echo $number; ///////  result 0000000123

答案 10 :(得分:-1)

这非常有效:

$number = 13246;
echo sprintf( '%08d', $number );

答案 11 :(得分:-1)

function duration($time){

    $hours = '';
    $minutes = '00:';
    $seconds = '00';

    if($time >= 3600){
        //0 - ~ hours
        $hours    = floor($time / 3600);
        $hours    = str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
        $time     = $time % 3600;
    }

    if($time >= 60){
        //0 - 60 minute     
        $minutes  = floor($time / 60);
        $minutes  = str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
        $time     = $time % 60; 
    }

    if($time){
        //0 - 60 second
        $seconds  = str_pad($time, 2, '0', STR_PAD_LEFT);       
    }

    return $hours . $minutes . $seconds;

}

echo duration(59); // 00:59
echo duration(590); // 09:50
echo duration(5900); // 01:38:20

答案 12 :(得分:-1)

您总是可以滥用类型的杂耍:

function zpad(int $value, int $pad): string {
    return substr(1, $value + 10 ** $pad);
}

如果10 ** pad > INT_MAXvalue >= 10 * pad都无法正常工作。

答案 13 :(得分:-1)

  

如果可以将零或任何其他内容附加到字符串中。    像

public function saveHoliday($month)
    {
       return "0{$month}";
    }

  echo $this->saveHoliday(1);   // 01