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

で始まる整数リテラルは、基数 80と解釈されます。秒の値は 83です。詳細については、整数のマニュアルを参照してください。$x

このintval()関数を使用すると、ユーザー文字列を読み取る場合に基数を指定できます。

リテラルについて言えば、PHP ではリテラル0は 10 進数ですが、C および C++ では8 進数です。人生を楽しくするのは、小さな違いです。

于 2011-09-01T19:09:51.283 に答える