PHP Conference Japan 2024

is_int

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

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

描述

is_int(混合 $value): 布尔值

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

注意:

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

参数

value

要评估的变量。

返回值

如果 value 是一个 整数,则返回 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 条注释

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)
?>
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() 中始终为真,但在 is_float() 中永远为假
$big = 9223372036854775807; // 在 64 位环境中仅对 is_int() 为真

if( is_int($small) || is_float($small) ); // 在 32 位环境中通过
if( is_int($big) || is_float($big) ); // 在 32 位环境中通过
?>
e dot sand at elisand dot com
15 年前
Simon Neaves 几乎解释清楚了为什么他的函数是测试整数的完美选择(可能大多数人需要)。不过,他在 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(这可能是意外的)。
andre dot roesti at 7flex dot net
14 年前
使用此函数,您可以检查多个变量中的每一个是否为整数。这比为每个变量编写“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
?>
Hector (hector-ordonez.com)
8 年前
Simon Neaves 的答案不完整:负整数将返回 false。

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

转换值,然后检查它是否与原始值相同。

<?php
if ( (int) $n !== $n ) {
echo
'不是整数';
} else {
echo
'是整数';
}
?>
petepostma at gmail dot spam dot com
12 年前
这种仅整数类型检查存在反面。

is_int( $integer_type) 仅在类型为 int 时返回 true,而不是值。
ctype_digit( $string_type) 仅当类型为字符串且其值为 INT 时返回 true。

所以
return ( is_int($value) || ctype_digit($value) );
nicolas dot giraud at actiane dot com
12 年前
只需一种更简短的方法来检查您的变量是否为整数或包含整数的字符串,而不包含 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

?>

简洁又酷 :)
Vasiliy Makogon
8 年前
如果您想检测以纯整数或浮点数形式呈现,以及以字符串值形式呈现的整数或浮点数值,请使用这些函数

<?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 中以浮点数形式呈现
1, '10', '+1', '1.1', 1.1, .2, 2., '.2', '2.',
'-2.', '-.2', null, [], true, false, 'string'
] as $value) {
echo
$value . ':' . gettype($value) . ' 是整数? - ' . (isInteger($value) ? '是' : '否') . PHP_EOL;
echo
$value . ':' . gettype($value) . ' 是浮点数? - ' . (isFloat($value) ? '是' : '否') . PHP_EOL;
}
?>
me at rexxars dot com
15 年前
我正在寻找检查无符号整数的最快方法,该整数支持 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%。
gabe at websaviour dot com
21 年前
虽然这可以从文档中推断出来,但要注意数字字符串。我在一个 MySQL 应用程序中遇到了这个问题,在该应用程序中,我会选择一个 INT 主键或插入一个新记录并使用 mysql_insert_id() 获取主键,然后继续到新部分。

我使用 is_int() 来确保在使用键变量时后续查询不会中断。不幸的是,我没有意识到,虽然 mysql_insert_id() 返回一个整数,但 mysql_result() 始终返回一个字符串,即使您是从 INT 字段中 SELECT 的。

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