【问题标题】:What's the correct way to test if a variable is a number in PHP?测试变量是否是PHP中的数字的正确方法是什么?
【发布时间】:2011-12-07 03:06:17
【问题描述】:

当我从数据库中获取数据时,结果是一个字符串,即使它有一个数值。这就是我的意思:

// An integer
$int=10;
if(is_int($int)) // Returns true
...

// A string
$int='10';
if(is_int($int)) // Returns false
...

我希望这两个都返回 true。

【问题讨论】:

    标签: php integer


    【解决方案1】:

    如果您希望它接受浮点值,请使用 is_numeric(),而仅对于整数使用 ctype_digit()。

    【讨论】:

    • 应该使用is_int 测试整数,ctype_digit 检查字符串是否只包含数字。
    【解决方案2】:

    您正在寻找 is_numeric()。

    http://php.net/is_numeric

    【讨论】:

    • is_numeric 和 is_int 是两个不同的东西。 onc 只接受整数,另一个允许小数、科学记数法等。
    【解决方案3】:

    您不能用引号(单引号或双引号)将变量括起来,
    用引号括起来的任何东西都将被视为字符串

    见:- http://php.net/manual/en/language.types.string.php

    数据库返回的所有内容(假设是 mysql)总是 STRING,
    对于您的情况,它将是一个数字字符串
    函数 is_numeric(就像其他人提到的那样)是正确的方法

    is_numeric — 判断变量是数字还是数字字符串

    【讨论】:

      【解决方案4】:

      我有点 hack-ish,但可能是检查值是否“匹配整数模式”的更有力的方法。我的意思是它可能/可能不会显式转换为整数,但它具有整数的所有特征。

      function isInt($i){
        return (is_numeric($i)  // number, but not necessarily an integer
             && (int)$i == $i); // when cast it's still the same "number"
      }
      

      Example(试试你自己的输入,看看效果如何)

      【讨论】:

        【解决方案5】:

        将变量转换为所需的类型。

        允许的演员表是:

        • (int), (integer) - 转换为整数
        • (bool), (boolean) - 转换为布尔值
        • (float), (double), (real) - 转换为浮点数
        • (字符串)- 转换为字符串
        • (数组) - 转换为数组
        • (对象)- 转换为对象
        • (未设置)- 强制转换为 NULL (PHP 5)

        代码:

        <?
        
        header( 'content-type: text/plain' );
        $var = '10.1';
        
        var_dump( (int)$var );
        var_dump( (bool)$var );
        var_dump( (float)$var );
        var_dump( (string)$var );
        var_dump( (array)$var );
        var_dump( (object)$var );
        var_dump( (unset)$var );
        

        输出:

        int(10)
        bool(true)
        float(10.1)
        string(4) "10.1"
        array(1) {
          [0]=>
          string(4) "10.1"
        }
        object(stdClass)#1 (1) {
          ["scalar"]=>
          string(4) "10.1"
        }
        NULL
        

        【讨论】:

          【解决方案6】:
          function is_number($s){
              return in_array(str_replace(str_split('0123456789'), '', $s), array(',','.',''));
          }
          

          【讨论】:

            猜你喜欢
            • 2012-05-29
            • 2010-10-03
            • 2019-01-23
            • 1970-01-01
            • 2016-03-31
            • 2013-03-16
            • 1970-01-01
            • 2019-01-12
            • 1970-01-01
            相关资源
            最近更新 更多