2016-09-25 1 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(8進数)システムを使用していると解釈されます。 PHP Manualから

0

0(ゼロ)と番号の前に、進表記を使用します。 16進表記を使用するには、番号の前に0xを付けます。バイナリ表記を使用するには、数字の前に0bを付けます。

PHPは、あなたの番号を8進値に変換することによってあなたに有利だと考えています。

コード:出力

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 

Demo

:最初の関数呼び出し、ゼロと進数で

2129921 
--- 
10100001 

が加算され、生成するためにここにあなたの問題を解決する方法です変わらない8進数の和。

2番目の関数呼び出しでは、ゼロと文字列型番号が一緒に追加されます。 PHPは文字列を整数として評価し、それをゼロに加算します。これにより、合計が実質的に先頭のゼロを取り除きます。 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 
--- 
関連する問題