is_int возвращает false для отрицательных значений, таких как "-10"? - PullRequest
4 голосов
/ 17 августа 2011

Возвращает ли функция 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 и целых чисел в целом. Я думал о том, что он действует на строку с содержимым типа «-10», когда мне нужно is_numeric для строки или is_int для целого числа. Спасибо за помощь.

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

Это не так:

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

Возможно, это не число для начала:

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

Если это так, попробуйте is_numeric () , который предназначен для строк.

3 голосов
/ 17 августа 2011

Почему бы не проверить это на себе?

<?php

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

производит:

bool(true)
bool(false)
1 голос
/ 17 августа 2011

использование

is_int(-10)

не

is_int("-10")
0 голосов
/ 15 сентября 2017

Я знаю, что этот вопрос старый, но если кому-то нужно проверить, представляет ли строка допустимое значение типа int или, например, число с плавающей точкой, вот простой скрипт, который сделает эту проверку

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

Работает как чек. Прежде всего, простая функция 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...