is_int()和ctype_digit()之间有区别吗?

时间:2008-10-25 13:30:28

标签: php function numbers

是一个更优先,还是比另一个更好?

7 个答案:

答案 0 :(得分:83)

如果参数是整数类型,则

is_int()返回true,ctype_digit()接受字符串参数,如果字符串中的所有字符都是数字,则返回true。

示例:

┌──────────┬───────────┬────────────────┐
│          │  is_int:  │  ctype_digit:  │
├──────────┼───────────┼────────────────┤
│ 123      │  true     │  false         │
├──────────┼───────────┼────────────────┤
│ 12.3     │  false    │  false         │
├──────────┼───────────┼────────────────┤
│ "123"    │  false    │  true          │
├──────────┼───────────┼────────────────┤
│ "12.3"   │  false    │  false         │
├──────────┼───────────┼────────────────┤
│ "-1"     │  false    │  false         │
├──────────┼───────────┼────────────────┤
│ -1       │  true     │  false         │
└──────────┴───────────┴────────────────┘

答案 1 :(得分:4)

还有is_numeric,如果传入的值可以解析为数字,则返回true。

enter image description here

如果我尝试比较 PHP 5.5.30 上的函数性能,结果如下:

enter image description here

这是我用于基准测试的代码

compose

答案 2 :(得分:3)

你最不应该担心的是其中一个是多么快。检查字符串是否为整数无法成为代码中的瓶颈。

答案 3 :(得分:3)

ctype 总是在整数类型上返回false

foreach(range(-1000 , 1000)as $num){
    if(ctype_digit($num)){
        echo $num . ", ";
    }    
}

ctype_digit对于以下整数类型编号返回true。

-78,-77,-71,48,49,50,51,52,53,54,55,56,57,178,179,185, 1000,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270

基本做法是将每个数字设为字符串e.q. strval($ num)或(String)$ num 在这种情况下,负值(-78)将始终返回false。


is_int将在-2147483647到2147483647之间的int类型值上返回true。 超过该数字的任何值都将返回错误,假设它在32位系统上运行。 在64位上它可以达到-9223372036854775807至9223372036854775807的范围


在表现方面个人很难说。 ctype_digit可能比is_int快,但是如果必须将每个值转换为字符串,则整体性能会降低。

答案 4 :(得分:1)

如果您不关心参数是int类型还是带数字的字符串,请使用is_numeric。对于浮子也会返回true,tho。

答案 5 :(得分:0)

如果整数范围在负范围内或在0到47之间或在58到255之间,则Ctype_digit返回false。您可以使用以下代码段检查ctype_digit的行为。

setlocale(LC_ALL, 'en_US.UTF-8');
var_dump(
    true === array_every(range(-1000, -1), 'ctype_digit_returns_false'),
    true === array_every(range(0, 47), 'ctype_digit_returns_false'),
    true === array_every(range(48, 57), 'ctype_digit_returns_true'),
    true === array_every(range(58, 255), 'ctype_digit_returns_false'),
    true === array_every(range(256, 1000), 'ctype_digit_returns_true')
);

// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/every
function array_every(array $array, $callable)
{
    $count = count($array);

    for ($i = 0; $i < $count; $i +=1) {

        if (!$callable($array[$i])) {

            return false;

        }

    }

    return true;
}

function ctype_digit_returns_true($v)
{
    return true === ctype_digit($v);
}

function ctype_digit_returns_false($v)
{
    return false === ctype_digit($v);
}

答案 6 :(得分:0)

嗯,这很有趣:)以下是故事:

  

is_numeric: - 查找变量是数字还是数字字符串,无论值为负数还是布尔值或字符串或任何类型   数字,如果值是纯数字,它将返回 'true' 其他 'false'

     

请记住:无任何字符编号任何类型:)

  

is_init - 查找变量的类型是否为整数,如果value为纯整数,则返回'true',否则为'false'。

     

请记住:没有字符,双重或否定,只有整数

  

in_integer - is_int()的别名

  

intval: - 获取变量的整数值,它取所有类型的值并仅返回Integer值,如果值为负则则   返回“ -Integer ”值。无论值是Integer,Float,   否定或“ NumberString ”或“ NumberStringCharacter ”。   它从字符串“ If String Starts with Number ”中减去整数值。

     
      
  • NumberString =字符串格式的数字值
  •   
  • NumberStringCharacter =字符串以数字开头
  •   
     

请记住:您将从Number,Float,Negative或String获取Integer值,该值以Number开头。

  

ctype_digit - 检查数字字符,如果以字符串格式提供整数,您将获得“ true ”其他'的 false '。它会   仅使用StringNumber,No Float,No Negative only Whole Number   as String。

     

请记住:整数字符串,无负数,无浮点数,无数字类型,无字符,仅数字作为字符串。

鸟瞰图

enter image description here

感谢http://php.net/