2011-09-01 63 views
1

我試圖建立一個PHP函數,發現了一些奇怪的行爲,我甚至不能制定一個適當的問題,所以如果任何人都可以解釋發生了什麼,我將不勝感激。瞭解前導零的str_pad()

我正在處理一組具有前導零的數字,它的重要性在於它們被維護,但用戶幾乎從不輸入前導零。所以我用這個:

$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,則會發生同樣的情況。

這個結果讓我完全不知所措。預先感謝您對這裏發生的事情的任何解釋。

回答

5

0開始的整數文字被解釋爲基數8。您的第二個$x的值爲83. See the manual on integers瞭解詳情。

intval()函數允許您在讀取用戶字符串時指定基數。

如果我們正在談論文字,在PHP中,文字0是十進制的,而在C and C++中是八進制。這是生活樂趣的小差異。

+0

我會研究保持用戶輸入基數10.現在我知道要研究什麼,謝謝! – lcHatter

+0

嗯,['intval()'](http://php.net/manual/en/function.intval.php)函數可以讓你在讀取用戶字符串時指定基地址。我只是在談論文字。 –