PHP动态添加前导零到个位数数字

254

PHP - 有没有一种快速的、即时的方法来测试单字符字符串,然后在其前面添加一个前导零?

例子:

$year = 11;
$month = 4;

$stamp = $year.add_single_zero_if_needed($month);  // Imaginary function

echo $stamp; // 1104

3
经过测试,发现sprintf()更好一些:它具有通用的语言格式,而且不使用类常量等其他特点。 - Ben
3个回答

610
您可以使用sprintf:http://php.net/manual/en/function.sprintf.php
<?php
$num = 4;
$num_padded = sprintf("%02d", $num);
echo $num_padded; // returns 04
?>

仅当字符长度少于所需时,它才会添加零。

编辑:如@FelipeAls所指出:

在处理数字时,应使用%d(而不是%s),特别是存在负数的情况下。 如果只使用正数,则两个选项都可以正常工作。

例如:

sprintf("%04s", 10); 返回 0010
sprintf("%04s", -10); 返回 0-10

而:

sprintf("%04d", 10); 返回 0010
sprintf("%04d", -10); 返回 -010


11
小心负数(显然这里与日期无关! :) )。%03s 可以输出 0-5,而 %03d 则会输出 -05 - FelipeAls
这不适用于负数。 - Rafik Bari
@RafikBari 我已经更新了我的答案,包括 @FelipeAls 提到的信息。如果您使用 %02d,负数将被正确处理。 - Kirk Beard
2
你的编辑有误,sprintf("%04s", 10); 返回的是0010而不是1000。 - Marek Lisý
1
同时,sprintf("%04d", -10); 返回-010。在PHP 5.5.18上进行了测试。 - Marek Lisý
这可以被反转吗? - MichaelTheDev

230
你可以使用str_pad函数来添加0。
str_pad($month, 2, '0', STR_PAD_LEFT); 

string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )


4
这里纯金啊! - Jordan
4
@zzlalani - 实际上,如果你仔细查看Kirk Beard的答案中的示例,它是保存到一个变量中的 :) - Ben
这不适用于负数。 - Rafik Bari

18

2
str_pad更易读。我喜欢保持简单。sprintf是一个很棒的函数,我经常用它来进行翻译,当字符串中必须有一个变量时,但对于这种情况,我会选择str_pad();因为我只使用正整数,它们不需要任何花哨的东西。 - Lukas Liesis
使用sprintf:sprintf('%08d',1234567);或者您也可以使用str_pad:str_pad($value, 8, '0', STR_PAD_LEFT); - Kamlesh
有关有符号数字的问题?str_replace("00", "0", sprintf('%03d', $num)) - Sahib Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接