我有一个变量,其值为1234567。
我希望它包含8位数字,即01234567。
有PHP函数吗?
我有一个变量,其值为1234567。
我希望它包含8位数字,即01234567。
有PHP函数吗?
当前回答
你总是可以滥用类型杂耍:
function zpad(int $value, int $pad): string {
return substr(1, $value + 10 ** $pad);
}
如果10 ** pad > INT_MAX或>= 10 * pad,这将无法正常工作。
其他回答
简单的答案
$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或8位,也可以使用
$str = ($input < 10000000) ? 0 . $input : $input;
我运行了一些测试,这将比str_pad或sprintf快一倍。 如果输入可以是任意长度,那么你也可以使用
$str = substr('00000000' . $input, -8);
这没有另一个快,但也应该比str_pad和sprintf快一点。
顺便说一句:我的测试还说sprintf比str_pad快一点。我使用PHP 5.6进行所有测试。
编辑:虽然substr版本看起来仍然非常快(PHP 7.2),但它也被打破了,以防你的输入可能比你想要填充的长度更长。例如,你想要填充到3位数字,而你的输入有4个比substr('0000'。'1234', -3) = '234'只会产生最后3位数字
我写了这个简单的函数来生成这样的格式: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);
?>
虽然我不太确定您想要做什么,但您可能正在寻找sprintf。
这就是:
$value = sprintf( '%08d', 1234567 );