從PHP Manual:
要使用八進制符號,前面加上0(零)的數目。要使用十六進制符號,請在數字前面加上0x。使用二進制表示法在數字前面加上0b。
PHP認爲它是通過將您的數字轉換爲八進制值來幫助您。以下是爲您解決問題的方式:
代碼:(Demo)
function generate_alpha_num_id($x){
return 0+$x; // add zero to convert strings to integers (effectively trimming leading zeros)
}
echo generate_alpha_num_id(010100001); // send parameter as 2129921 base 8 (octal)
echo "\n---\n";
echo generate_alpha_num_id('010100001'); // send parameter as string to avoid octal interpretation
輸出:
2129921
---
10100001
在第一個函數調用,零和八進制數加在一起,以生成八進制數不變。
在第二函數調用,零和字符串型數目被加在一起。 PHP將字符串評估爲一個整數並將其添加到零,從而生成總和以有效地刪除前導零(s)。
從PHP Manual:
當一個字符串被在數值上下文評價,所得到的值和類型被確定爲如下。
如果字符串不包含'。','e'或'E'中的任何字符,並且數值適合整數類型限制(由PHP_INT_MAX定義),則字符串將被評估爲整數。在所有其他情況下,它將被評估爲浮動。
要提供一些更多的方式來解決這個問題,可以考慮以下變化:
function generate_alpha_num_id($x){
var_export(0+$x);
echo "\n---\n";
var_export((int)$x);
echo "\n---\n";
var_export((integer)$x);
echo "\n---\n";
var_export(1*$x);
echo "\n---\n";
var_export(intval($x));
echo "\n---\n";
}
generate_alpha_num_id('010100001'); // send parameter as string to avoid octal interpretation
輸出:
10100001
---
10100001
---
10100001
---
10100001
---
10100001
---
[*「要使用八進制符號,與之前的數0" *](http://php.net/manual/en/language.types.integer.php) –