在PHP中使用前导零格式化数字

And*_*eda 568 php format numbers

我有一个包含值的变量1234567.

我希望它包含8个数字,即01234567.

那有PHP功能吗?

rek*_*o_t 1136

用途sprintf:

sprintf('%08d', 1234567);
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用str_pad:

str_pad($value, 8, '0', STR_PAD_LEFT);
Run Code Online (Sandbox Code Playgroud)

  • 只想添加:str_pad不是带负数的选项 (51认同)
  • 只是添加wtf8_decode所说的内容; 负数不会有前导零,而且它们不是正数.即08将被写为日期,或者需要正两位数的东西(银行账户排序代码等).如果我错了,请纠正我,但据我所知,没有真正的生活实例要求负值的前导零? (6认同)
  • 想要添加`sprintf('%+ 03d:00 UTC',$ i)```i`是-12到12,将打印+或 - 根据需要,并且还会为小于2的数字设置前导零数字.非常适合在HTML中创建时区`SELECT`. (3认同)
  • 对于当前版本(7.1)和更低版本的sprintf(https://3v4l.org/junvv/perf#output)比`str_pad`(https://3v4l.org/cliNP/perf#output)快一点) (2认同)
  • 负数什么时候需要前导零...具有三位数的起飞计数器?T-010、T-009、T-008 等 (2认同)

Kaz*_*Koe 78

鉴于该值是$ value:

  • 回应它:

    printf("%08d", $value);

  • 为拿到它,为实现它:

    $formatted_value = sprintf("%08d", $value);

这应该够了吧


Md.*_*man 27

当我需要01而不是1时,以下内容对我有用:

$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
Run Code Online (Sandbox Code Playgroud)


joa*_*16v 25

echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
Run Code Online (Sandbox Code Playgroud)


Hup*_*pie 18

虽然我不确定你想做什么,但你可能正在寻找sprintf.

这将是:

$value = sprintf( '%08d', 1234567 );
Run Code Online (Sandbox Code Playgroud)


小智 14

sprintf 是你需要的.

编辑(以某种方式请求downvotes),从上面链接的页面,这里是一个示例"零填充整数":

<?php
    $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Run Code Online (Sandbox Code Playgroud)

  • 除了简单地链接sprintf()的手册页之外,还可以通过示例或更多解释更好. (3认同)

Pet*_*ist 13

简单回答

$p = 1234567;
$p = sprintf("%08d",$p);
Run Code Online (Sandbox Code Playgroud)

我不确定如何解释评论说"它永远不会超过8位",如果它指的是输入或输出.如果它引用输出,则必须有一个额外的substr()调用来剪切字符串.

剪辑前8位数

$p = substr(sprintf('%08d', $p),0,8);
Run Code Online (Sandbox Code Playgroud)

剪辑最后8位数字

$p = substr(sprintf('%08d', $p),-8,8);
Run Code Online (Sandbox Code Playgroud)


Abc*_*hen 6

如果输入的数字总是7位或8位,您也可以使用

$str = ($input < 10000000) ? 0 . $input : $input;
Run Code Online (Sandbox Code Playgroud)

我进行了一些测试,得到的这个测试速度可以达到str_pad或者提高一倍sprintf.
如果输入可以有任何长度,那么您也可以使用

$str = substr('00000000' . $input, -8);
Run Code Online (Sandbox Code Playgroud)

这不如另一个快,但也应该比str_pad和它快一点sprintf.

顺便说一句:我的测试也表示比它sprintf快一点str_pad.我用PHP 5.6进行了所有测试.