开发者

is_int returns false for negative values like "-10"?

Does php's is_int function return false for negative numbers because integers in php are unsigned, or开发者_运维知识库 is there other behaviour that I'm missing? I'm trying to check if something is a whole number, and I don't want to rely on that behaviour of is_int (for the first part of the test) if it's doing something different.

Clarification: I know that is_int returns false for negative numbers, but I'm asking why because of this behaviour: var_dump(intval("-10")) prints int(-10), and var_dump(intval("10")) prints int(1), so both negative and positive values are considered integers, yet is_int("-10") returns false.

EDIT: Ok, sorry everyone, I got quite a bit confused about the behaviour of is_int and integers in general. I was thinking of it acting on a string with contents like "-10" when what I need is is_numeric on a string, or is_int on an integer itself. Thanks for the help.


It doesn't:

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

Probably, it isn't a number to begin with:

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

If so, try out is_numeric(), which is designed for strings.


Why not test it for yourself?

<?php

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

produces:

bool(true)
bool(false)


use

is_int(-10)

not

is_int("-10")


I know this question is old, bu if someone need to check if a string represents an valid int, or, for example, a float, here is a simple script that will make that validation

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

It works as a check. Forst, the simple is_int() function, then, it checks, for non zero values if the int conversion is equal to its float one, and finally, if the string is literally "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) 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜