php默认将数字转换为其他基数?

时间:2016-09-25 14:46:36

标签: php

我正在写一个代码在php中我在传递一个数字到一个函数。但在函数中,我猜它默认转换为其他基数。请找到下面的代码。

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

理想情况下,我的输出应该是10100001.但代码输出是2129921。

我很难理解为什么会这样。任何帮助都很有用。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

因为您的数字以0开头,所以它在PHP中被解释为使用基本8(八进制)系统。

答案 1 :(得分: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将字符串计算为整数并将其添加到零,生成总和有效地删除了前导零。

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