在PHP中从一个、两个或三个数字整数中生成四位数字整数

14
我正在调用数据库来获取特定项目的ID。通常会有类似于:1, 2, 14, 23, ...这样的ID。我需要从数据库中获取ID并输出一个四位数的数字。
例如: 我的结果ID是:1。现在当我得到这个值时,我希望它变成0001。或者如果我的结果ID是13,它应该变成0013等。
如何在不改变数据库中实际ID的情况下,在php中实现这一点?
4个回答

32

你想要对一个整数进行补零操作

你可以使用sprintf('%04u', $n)或者str_pad($n, 4, '0', STR_PAD_LEFT)来达到目的。


使用其中一个与另一个有什么区别吗?我正在使用PHP5,但第一个不起作用。 - aspirinemaga
@aspirinemaga:你可能做错了什么(请参见http://codepad.org/nzEgZ9nP)。关于区别,它们都可以做同样的事情——`sprintf`来自于`C`世界,但是`str_pad`更强大,因为它提供了左右填充,并且您也不需要担心转义元字符,例如`%`。此外,您可以使用长度大于1个字符的字符串进行填充(我不确定您是否可以使用`sprintf`做到相同的效果)。 - Alix Axel
非常感谢您的评论。我会更仔细地查看我的代码,因为它无法与sprintf()一起使用。 - aspirinemaga
哦,对不起,当然它没有起作用,我用sprintf替换了echo,我以为sprintfecho是一样的,只是有另外的功能。 - aspirinemaga
@aspirinemaga:不需要 =),你可以使用printf,它与print相同,但具有占位符魔法。 - Alix Axel
$now=microtime(true); $t=sprintf('%03u', $n); $diff=microtime(true)-$now; echo "sprintf所需时间为:$diff ... 结果是:$t<br>"; $now=microtime(true); $t=str_pad($n, 3, '0', STR_PAD_LEFT); $diff=microtime(true)-$now; echo "str_pad所需时间为:$diff ... 结果是:$t<br>"; - John Boe

11

一如既往。

sprintf("%04d", $num)

它不起作用,根本没有输出任何东西,甚至没有错误提示,只是一个空白的区域。我使用的方式正确吗?:<?php sprintf("%04d", $item->id);?> - aspirinemaga
1
$modified_id = sprintf("%04d", $item->id); - Tim
1
@aspirinemaga:它只返回字符串。你需要负责输出它。 - Ignacio Vazquez-Abrams

5

您想使用PHP strpad 函数:

<?php
$input = 1;
echo str_pad($input, 4, "0", STR_PAD_LEFT);  // produces "0001"
?>

3

如果您希望在MySQL查询中执行此操作,以下是方法:

SELECT LPAD(id, 4, '0') as modified_id FROM table;

哦,使用PHP和MySQL方法是否有任何性能上的区别? - aspirinemaga

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