is_int

(PHP 4, PHP 5, PHP 7, PHP 8)

is_int查找变量类型是否为整数

描述

is_int(混合 $value): 布尔值

查找给定变量的类型是否为整数。

注意:

要测试变量是否为数字或数字字符串(例如始终为字符串的表单输入),您必须使用 is_numeric()

参数

value

要评估的变量。

返回值

如果 value 是一个 int,则返回 true,否则返回 false

示例

示例 #1 is_int() 示例

<?php
$values
= array(23, "23", 23.5, "23.5", null, true, false);
foreach (
$values as $value) {
echo
"is_int(";
var_export($value);
echo
") = ";
var_dump(is_int($value));
}
?>

上面的示例将输出

is_int(23) = bool(true)
is_int('23') = bool(false)
is_int(23.5) = bool(false)
is_int('23.5') = bool(false)
is_int(NULL) = bool(false)
is_int(true) = bool(false)
is_int(false) = bool(false)

参见

添加备注

用户贡献的备注 11 个备注

167
Simon Neaves
16 年前
我发现 is_int 和 ctype_digit 的行为不像我预期的那样,所以我创建了一个名为 isInteger 的简单函数。希望有人能发现它有用。

<?php
function isInteger($input){
return(
ctype_digit(strval($input)));
}

var_dump(is_int(23)); //bool(true)
var_dump(is_int("23")); //bool(false)
var_dump(is_int(23.5)); //bool(false)
var_dump(is_int(NULL)); //bool(false)
var_dump(is_int("")); //bool(false)

var_dump(ctype_digit(23)); //bool(true)
var_dump(ctype_digit("23")); //bool(false)
var_dump(ctype_digit(23.5)); //bool(false)
var_dump(ctype_digit(NULL)); //bool(false)
var_dump(ctype_digit("")); //bool(true)

var_dump(isInteger(23)); //bool(true)
var_dump(isInteger("23")); //bool(true)
var_dump(isInteger(23.5)); //bool(false)
var_dump(isInteger(NULL)); //bool(false)
var_dump(isInteger("")); //bool(false)
?>
33
Robin
14 年前
请记住,is_int() 以有符号方式操作,而不是无符号方式,并且受运行 PHP 的环境的字长限制。

在 32 位环境中

<?php
is_int
( 2147483647 ); // true
is_int( 2147483648 ); // false
is_int( 9223372036854775807 ); // false
is_int( 9223372036854775808 ); // false
?>

在 64 位环境中

<?php
is_int
( 2147483647 ); // true
is_int( 2147483648 ); // true
is_int( 9223372036854775807 ); // true
is_int( 9223372036854775808 ); // false
?>

如果您发现自己部署在 32 位环境中,并且需要处理可能超出 32 位范围的整数(并且只有整数)的数字确认,您可以将 is_int() 与 is_float() 组合起来以保证涵盖完整的 64 位范围。

<?php
$small
= 2147483647; // 对于 is_int() 始终为 true,但对于 is_float() 永远为 false
$big = 9223372036854775807; // 仅在 64 位环境中对于 is_int() 才为 true

if( is_int($small) || is_float($small) ); // 在 32 位环境中通过
if( is_int($big) || is_float($big) ); // 在 32 位环境中通过
?>
35
e dot sand at elisand dot com
15 年前
Simon Neaves 在解释为什么他的函数是测试 int 的完美选择(可能大多数人需要)方面很接近。不过,他在 ctype_digit() 输出方面犯了一些错误——可能是打字错误,或者可能是当时他使用的 PHP 版本中的错误。

他示例中部分内容的正确输出应该是

<?php
var_dump
(ctype_digit(23)); //bool(false)
var_dump(ctype_digit("23")); //bool(true)
var_dump(ctype_digit(23.5)); //bool(false)
var_dump(ctype_digit(NULL)); //bool(false)
var_dump(ctype_digit("")); //bool(false)
?>

如您所见,使用 *仅仅* ctype_digit() 可能并不总是有效的原因是,它仅在输入为字符串时返回 TRUE - 给定一个数字值,它将返回 FALSE(这可能是意外的)。
16
andre dot roesti at 7flex dot net
14 年前
使用此函数,您可以检查多个变量中的每一个是否都是 int。这比为每个变量编写“is_int”更方便一些。

<?php
function are_int ( ) {
$args = func_get_args ();
foreach (
$args as $arg )
if ( !
is_int ( $arg ) )
return
false;
return
true;
}

// 示例:
are_int ( 4, 9 ); // true
are_int ( 22, 08, 'foo' ); // false
?>
4
Hector (hector-ordonez.com)
8 年前
Simon Neaves 的答案不完整:负整数将返回 false。

我建议查看 stackoverflow 上的答案
http://stackoverflow.com/questions/6416763/checking-if-a-variable-is-an-integer-in-php
8
davide dot renzi at gmail dot com
8 年前
我发现了一种更快的方式来确定整数。
在我的环境中,此方法大约是使用 is_int() 的一半时间。

将值强制转换为 int 类型,然后检查它是否与原始值相同。

<?php
if ( (int) $n !== $n ) {
echo
'not is int';
} else {
echo
'is int';
}
?>
6
petepostma at gmail dot spam dot com
12 年前
这种 int 类型的检查存在一个反面。

is_int( $integer_type) 仅在 TYPE 为 int 时返回 true,而不是其值。
ctype_digit( $string_type) 仅在 TYPE 为 string 且其值为 INT 时返回 true。

因此
return ( is_int($value) || ctype_digit($value) );
8
nicolas dot giraud at actiane dot com
12 年前
检查变量是否为 int 或包含 int 的字符串,但不包含其他数字(0 到 9 之外的数字)的更短方法

<?php
$bool
= ( !is_int($value) ? (ctype_digit($value)) : true );

$value = 42; //true
$value = '42'; //true
$value = '1e9'; //false
$value = '0155'; //true
$value = 0155; //true
$value = 0xFF; //true,虽然它与 255 相同
$value = '0xFF'; //false
$value = 'a'; //false
$value = array(); //false
$value = array('5'); //false
$value = array(5); false
$value
= ''; //false
$value = NULL; //false

?>

简洁且酷 😎
1
Vasiliy Makogon
8 年前
如果您想检测以纯 int 或 float 表示的整数或浮点数,以及以字符串形式表示的这些值,请使用以下函数

<?php
function isInteger($val)
{
if (!
is_scalar($val) || is_bool($val)) {
return
false;
}
if (
is_float($val + 0) && ($val + 0) > PHP_INT_MAX) {
return
false;
}
return
is_float($val) ? false : preg_match('~^((:?+|-)?[0-9]+)$~', $val);
}

function
isFloat($val)
{
if (!
is_scalar($val)) {
return
false;
}
return
is_float($val + 0);
}

foreach ([
'11111111111111111', 11111111111111111, // > PHP_INT_MAX - 在 PHP 中表示为 float
1, '10', '+1', '1.1', 1.1, .2, 2., '.2', '2.',
'-2.', '-.2', null, [], true, false, 'string'
] as $value) {
echo
$value . ':' . gettype($value) . ' is Integer? - ' . (isInteger($value) ? 'yes' : 'no') . PHP_EOL;
echo
$value . ':' . gettype($value) . ' is Float? - ' . (isFloat($value) ? 'yes' : 'no') . PHP_EOL;
}
?>
1
me at rexxars dot com
14 年前
我正在寻找检查无符号整数的最快方法,该整数支持大数字,例如 4318943448871348 或 0xFFFFFFFF。

我想到的最快方法是这个
<?php
function is_unsigned_int($val) {
return
ctype_digit((string) $value));
}
?>

对于 1515、0xFFFFFFFF、'3515' 和 '1365158185855141' 将返回 true。
对于 0.1515、'415.4134' 和 '-616' 将返回 false。

但请注意,在 PHP 5.1.0 之前,这将在空字符串上返回 true。

根据我的基准测试,这比正则表达式 ^\d+$ 快约 30%。
1
gabe at websaviour dot com
21 年前
虽然这可以从文档中推断出来,但要小心数字字符串。我在一个 MySQL 应用程序中遇到了这个问题,在该应用程序中,我将 SELECT 一个 INT PRIMARY KEY 或 INSERT 一个新记录并使用 mysql_insert_id() 获取 KEY,然后继续到新部分。

我使用 is_int() 来确保后续查询在使用 key 变量时不会中断。不幸的是,我未能意识到,虽然 mysql_insert_id() 返回一个 int,但 mysql_result() 总是返回一个字符串,即使您是从 INT 字段 SELECT 的。

我花了至少 30 分钟的时间试图找出为什么现有记录没有链接,但新记录可以正常链接。最后,我在 mysql_result() 上使用了 intval() 来确保后续查询始终有效。
To Top