我有一个变量,其值为1234567。

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

有PHP函数吗?


当前回答

简单的答案

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

我不确定如何解释“它永远不会超过8位数”的评论,以及它是指输入还是输出。如果它引用输出,则必须有一个额外的substr()调用来剪辑字符串。

剪掉前8位数字

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

剪掉最后8位数字

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

其他回答

简单的答案

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

我不确定如何解释“它永远不会超过8位数”的评论,以及它是指输入还是输出。如果它引用输出,则必须有一个额外的substr()调用来剪辑字符串。

剪掉前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);

我写了这个简单的函数来生成这样的格式:01:00:03

秒总是显示(即使是0)。 如果分钟大于零,或者需要数小时或数天,则显示分钟。 如果小时大于零或需要数天,则显示小时。 如果天大于零,则显示天数。

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 

您需要的是Sprintf。

编辑(在某种程度上被downvotes要求),从上面链接的页面,这里有一个“零填充整数”示例:

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

假设值为$value:

呼应它: 08年printf (" % d”,美元值); 要得到它: $formatted_value = sprintf("%08d", $value);

这样应该可以了