【问题标题】:is_int returns false for negative values like "-10"?is_int 为负值(如“-10”)返回 false?
【发布时间】:2011-08-17 16:36:47
【问题描述】:

php 的 is_int 函数是否返回 false 为负数,因为 php 中的整数是无符号的,还是我缺少其他行为?我正在尝试检查某个东西是否是一个整数,如果它正在做不同的事情,我不想依赖 is_int 的行为(对于测试的第一部分)。

澄清:我知道is_int 返回false 为负数,但我问为什么 因为这种行为:var_dump(intval("-10")) 打印int(-10)var_dump(intval("10")) 打印int(1),因此负值和正值都被视为整数,而 is_int("-10") 返回 false。

编辑:好的,对不起大家,我对 is_int 和一般整数的行为有点困惑。当我需要的是字符串上的is_numeric 或整数本身上的is_int 时,我正在考虑它作用于内容如“-10”的字符串。谢谢您的帮助。

【问题讨论】:

  • "-10" 是字符串而不是整数。整数的 PHP 手册也说 PHP does not support unsigned integers. php.net/manual/en/language.types.integer.php
  • 如果还不清楚:is_int() 是否 not 为负数返回 FALSE,无论您了解多少。当变量类型不是整数时返回 FALSE,如documented
  • 再次感谢您;请参阅我对我为什么感到困惑的说明。

标签: php integer


【解决方案1】:

它没有:

var_dump( is_int(-10) ); // bool(true)

可能不是以数字开头:

var_dump( is_int('-10') ); // bool(false)

如果是这样,试试is_numeric(),它是为字符串设计的。

【讨论】:

  • 我的 DownVote:不管这个 QA 是旧的,但这个答案暗示 is_int( '10' ) 将返回 true,而该值以数字而不是减号开头。但这是错误的,而 is_int( ) 仅验证整数没有任何转换
  • @codekandis 我看不到文字的建议位置,但请随时贡献和编辑答案以澄清这一点。如果您没有足够的代表,我相信您仍然可以进行编辑,并且您的更改将经过同行评审并有望获得批准。
【解决方案2】:

为什么不自己测试一下呢?

<?php

var_dump(is_int(-1));
var_dump(is_int('-1'));

产生:

bool(true)
bool(false)

【讨论】:

  • 另外,使用在线 php 评估器进行简单测试 - writecodeonline.com/php
  • 是的,但 is_int("-10") 正在处理包含 -10 的 STRING。在 PHP 的其他地方,它只是将字符串 -10 自动转换为实际的数字 -10,但 is_int 适用于内部数据类型,在这种情况下是字符串。
  • @John Himmelman - 我只是在我的电脑上使用php -a 进行类似的简单测试。我只是混淆了 is_int 在字符串上的行为与“看起来像”整数的内容及其在整数本身上的行为。
【解决方案3】:

使用

is_int(-10)

不是

is_int("-10")

【讨论】:

    【解决方案4】:

    我知道这个问题很老了,如果有人需要检查一个字符串是否代表一个有效的 int,或者,例如,一个浮点数,这里有一个简单的脚本可以进行验证

    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    

    它可以用作支票。 Forst,简单的 is_int() 函数,然后,它检查非零值是否 int 转换等于它的浮点数,最后,如果字符串字面上是“0”。

    <?php
    $val = 3;
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    $val = 5.5;
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    $val = 'hola';
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    $val = '3';
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    $val = '5.5';
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    $val = '0';
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    $val = 0;
    $is_int = (is_int($val))||(((int)$val)&&(((int)$val)==((float)$val)&&((string)$val==$val))||$val==='0');
    var_dump($is_int);
    //bool(true) bool(false) bool(false) bool(true) bool(false) bool(true) bool(true) 
    

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2013-09-21
      • 2018-05-07
      • 2018-01-29
      相关资源
      最近更新 更多