2016-09-25 31 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 
---