1

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

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

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

并且,根据需要,这让我得到了 00123。

当我测试一个用户在他们的号码之前输入一个零时,奇怪的事情发生了

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

这将返回 00083。如果用户输入 00123,也会发生同样的情况。

这个结果让我完全困惑。提前感谢您对这里发生的事情的任何解释。

4

1 回答 1

5

以 8开头的整数文字0被解释为基数。您的第二个$x值为 83。有关详细信息,请参阅整数手册

intval()如果您正在读取用户字符串,该函数允许您指定基数。

如果我们谈论文字,在 PHP 中文字0是十进制,而在C 和 C++中是八进制。让生活变得有趣的是微小的差异。

于 2011-09-01T19:09:51.283 回答