Лучший способ узнать, является ли число «реальным» числом (int / float) или строкой («1» / «1.2») - PullRequest
1 голос
/ 10 ноября 2011

У меня есть функция, которая вызывается снова и снова из моего кода, где я могу передать переменную, и функция действует по-разному, если параметр является «действительным» (int / float) числом (другими словами, не выполняет никаких манипуляций).и не добавляйте кавычки вокруг него при передаче в запрос MySQL).В настоящее время мой код выполняет двойную проверку типов, но есть ли лучший способ?

$a = 1;
$b = '1';
$is_num = (is_numeric($a) && !is_string($a)); //true
$is_num = (is_numeric($b) && !is_string($b)); //false

, есть ли лучший более быстрый способ сделать это?

например (ОЧЕНЬ упрощенная версия):

$query = 'SELECT * FROM `table` WHERE ';
$field = 'id';
$operator = '=';
$value = 2;

$query .= '`'.$field.'`'.$operator;
$is_num = (is_numeric($value) && !is_string($value));
if($is_num){
    $query .=$value;
}else{
    $query .='"'.mysql_real_escape_string((string)$value).'"';
}
$query .=';';

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

Если ваш номер всегда целое число, вы можете использовать is_int. Если существует вероятность того, что это будет десятичное число, и вы хотите, чтобы оно возвращало $is_num == true, то нет, вы должны выполнить проверку как есть или проверить любой тип с помощью is_int($a) || is_float($a)

Конкретное назначение is_numeric состоит в том, чтобы проверить, является ли он «числовой или числовой строкой» и не существует «все типы чисел», охватывающих все.

Однако, учитывая ваш комментарий, что это для построителя запросов, почему бы просто не добавить кавычки, если is_string, а не иначе?

1 голос
/ 10 ноября 2011

Если вы просто имеете дело с целыми числами, is_int($a) работает.Если вы тоже имеете дело с поплавками, используйте

is_int($a) || is_float($a)
0 голосов
/ 11 ноября 2011
function is_number($input)
{
    if ( ! is_int($input) AND is_numeric($input))
    {
        return (float) $input === $input;
    }
    else
    {
        return (int) $input === $input;
    }
}

echo is_number('1.23')? 'true': 'false'; # false
echo is_number(1.23)? 'true': 'false'; # true
echo is_number(1)? 'true': 'false'; # true
echo is_number('1')? 'true': 'false'; # false

Лучше приводить к строке, потому что SQL будет приводить к int / float, если это тип поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...