PHP在单个数字之前添加前导零,即时[重复]
Posted
技术标签:
【中文标题】PHP在单个数字之前添加前导零,即时[重复]【英文标题】:PHP prepend leading zero before single digit number, on-the-fly [duplicate] 【发布时间】:2011-08-05 06:25:22 【问题描述】:php - 是否有一种快速、即时的方法来测试单个字符串,然后在前面加上前导零?
例子:
$year = 11;
$month = 4;
$stamp = $year.add_single_zero_if_needed($month); // Imaginary function
echo $stamp; // 1104
【问题讨论】:
经过测试,发现 sprintf() 好一点:它具有通用语言格式,并且不使用类常量等。 【参考方案1】:您可以使用 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);
返回 0010sprintf("%04s", -10);
返回 0-10
在哪里:
sprintf("%04d", 10);
返回 0010sprintf("%04d", -10);
返回 -010
【讨论】:
当心负数(这里的日期显然不是问题!:))。%03s
可以输出0-5
,其中%03d
将输出-05
这不适用于负数
@RafikBari 我已经更新了我的答案以包含@FelipeAls 提到的信息。只要您使用%02d
,负数就可以很好地处理。
你的编辑错了,sprintf("%04s", 10);返回 0010,而不是 1000。
还有 sprintf("%04d", -10);返回 -010。在 PHP 5.5.18 上测试【参考方案2】:
您可以使用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 ]] )
【讨论】:
纯金就在这里! @zzlalani - 实际上,如果您仔细查看 Kirk Beard 回答中的示例,它会保存到变量中:) 这不适用于负数【参考方案3】:字符串格式化的通用工具,sprintf
:
$stamp = sprintf('%s%02s', $year, $month);
http://php.net/manual/en/function.sprintf.php
【讨论】:
str_pad 更具可读性。我喜欢保持简单。 sprintf 是一个很棒的功能,我经常使用它来进行转换,当字符串中间必须有一个变量时,但是对于这样的事情,我会使用 str_pad();虽然我只使用正整数。他们不需要任何花哨的东西。 使用 sprintf: sprintf('%08d', 1234567);或者你也可以使用 str_pad: str_pad($value, 8, '0', STR_PAD_LEFT); 有符号数呢? str_replace("00", "0", sprintf('%03d', $num))以上是关于PHP在单个数字之前添加前导零,即时[重复]的主要内容,如果未能解决你的问题,请参考以下文章