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在单个数字之前添加前导零,即时[重复]的主要内容,如果未能解决你的问题,请参考以下文章

添加前导零 Python [重复]

将前导零附加到给定值[重复]

如何在 PHP 整数中保留前导零 [重复]

在JavaScript中用前导零填充数字[重复]

从Javascript中的数字中删除前导零[重复]

将前导零添加到 Spark 数据框中的列 [重复]