理解带有前导零的str_pad()

lcH*_*ter 1 php octal

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

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

$x = 123;
$n = 5;
$x = str_pad((int)$x,$n,"0",STR_PAD_LEFT);
echo $x;
Run Code Online (Sandbox Code Playgroud)

并且,根据需要,这让我获得了成功.

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

$x = 0123;
$n = 5;
$x = str_pad((int)$x,$n,"0",STR_PAD_LEFT);
echo $x;
Run Code Online (Sandbox Code Playgroud)

这将返回00083.如果用户输入00123,则会发生同样的事情.

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

Ker*_* SB 5

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

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

如果我们在谈论文字,在PHP中文字0是十进制的,而在C和C++中它是八进制的.这是让生活充满乐趣的微小差异.