:
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
---
[*」、進表記を使用して番号の前に0 "*](http://php.net/manual/en/language.types.integer.php) –