理解带有前导零的str_pad()

时间:2011-09-01 19:07:28

标签: php octal

我正在尝试构建一个php函数,并发现了一些奇怪的行为,我甚至无法提出一个正确的问题,所以如果有人能够解释发生了什么,我将不胜感激。

我正在使用带有前导零的一组数字,并且重要的是它们被维护,但用户几乎从不输入前导零。所以我用这个:

$x = 123;
$n = 5;
$x = str_pad((int)$x,$n,"0",STR_PAD_LEFT);
echo $x;

并且,根据需要,这会让我获得成功。

当我测试用户在数字

之前输入零时,会发生奇怪的事情
$x = 0123;
$n = 5;
$x = str_pad((int)$x,$n,"0",STR_PAD_LEFT);
echo $x;

返回00083.如果用户要输入00123,也会发生同样的事情。

这个结果让我完全不知所措。提前感谢您对此处发生的事情的任何解释。

1 个答案:

答案 0 :(得分:5)

0开头的整数文字被解释为 base 8 。您的第二个$x的值为83. See the manual on integers以获取详细信息。

intval()函数允许您在读取用户字符串时指定基数。

如果我们在谈论文字,在PHP中,文字0是十进制的,而在C and C++中它是八进制的。这让生活充满了乐趣。