2016-09-25 60 views
-2

我在PHP编写代码,其中在我传递一个号码的功能。但在功能上,它默认转换到其他基地我猜。请找到下面的代码。php将数字转换为默认的其他基数?

<?php 
    function generate_alpha_num_id($x){ 
    echo $x; 
    } 
    generate_alpha_num_id(010100001); 
?> 

理想,我的输出应为10100001.但输出的代码是2129921.

我奋力明白为什么会这样。任何帮助都非常有用。 在此先感谢。

+0

[*“要使用八进制符号,与之前的数0" *](http://php.net/manual/en/language.types.integer.php) –

回答

0

由于您的编号以0开头,因此在PHP中将其解释为使用基8(八进制)系统。

0

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 
---