我有一个包含值1234567
的变量。
我希望它包含8个数字,即01234567
。
是否有PHP功能?
答案 0 :(得分:1071)
答案 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)
答案 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_pad
或sprintf
的两倍。
如果输入可以有任何长度,那么您也可以使用
$str = substr('00000000' . $input, -8);
这不如另一个快,但也应该比str_pad
和sprintf
快一点。
sprintf
比str_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_MAX
或value >= 10 * pad
都无法正常工作。
答案 13 :(得分:-1)
如果可以将零或任何其他内容附加到字符串中。 像
public function saveHoliday($month)
{
return "0{$month}";
}
echo $this->saveHoliday(1); // 01