我有一个变量,它包含值 1234567
。
我希望它包含确切的8位数字,即01234567
。
是否有PHP函数可以实现这个目标?
当我需要使用01而不是1时,以下方法适用:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
假设$value的值为:
输出值:
printf("%08d", $value);
获取值:
$formatted_value = sprintf("%08d", $value);
这样就可以了。
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
sprintf
是你需要的。
编辑(不知何故被踩了),从上面链接的页面中,这是一个样例“零填充整数”:
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
简单回答
$p = 1234567;
$p = sprintf("%08d",$p);
我不确定如何解释“它永远不会超过8位数字”的评论,以及它是指输入还是输出。如果它是指输出,你需要使用另一个substr()函数调用来截取字符串。$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位数字。
$
) - AbcAeffchen$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
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('%+03d:00 UTC',$i)
中的$i
取值范围为-12到12,将会根据需要打印出+或者-符号,并且对于位数少于两位数的数字也会添加前导零。非常适合在HTML中创建时区SELECT
。 - Volomikesprintf
(https://3v4l.org/junvv/perf#output)比`str_pad`(https://3v4l.org/cliNP/perf#output)稍微快一点。 - Vladyslav Startsev