从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) –