Каков правильный способ проверить, является ли переменная числом в PHP?

Когда я беру данные из базы данных, результатом является строка, даже если она имеет числовое значение. Вот что я имею в виду:

// An integer $int=10; if(is_int($int)) // Returns true ... // A string $int='10'; if(is_int($int)) // Returns false ... 

Я хочу, чтобы оба они вернулись.

Используйте is_numeric() если вы хотите, чтобы он принимал значения с плавающей запятой, и ctype_digit() только для целых чисел.

Вы ищете is_numeric ().

http://php.net/is_numeric

Вы не можете заключить переменную с цитатой (одинарная или двойная кавычка),
все, заключенное в цитату, будет рассматриваться как строка

см .: http://php.net/manual/en/language.types.string.php

Все возвращается с помощью базы данных (предположим, что mysql) всегда STRING,
для вашего случая это будет ЧИСЛЕННАЯ СТРОКА
Функция is_numeric (как упоминалось выше) – это правильный путь

is_numeric – определяет, является ли переменная числом или числовой строкой

Я немного взломан, но может быть более сильным способом проверить, соответствует ли значение шаблону целого. Под этим я подразумеваю, что он может / не может быть явно передан в целое число, но у него есть все задания одного.

 function isInt($i){ return (is_numeric($i) // number, but not necessarily an integer && (int)$i == $i); // when cast it's still the same "number" } 

Пример (попробуйте свои собственные входы и посмотрите, как он встает)

Переместите переменную в нужный вам тип.

Разрешенными являются:

  • (int), (integer) – преобразование в целое число
  • (bool), (boolean) – отбрасывается в boolean
  • (float), (double), (real) – отбрасывается в float
  • (строка) – строка в строке
  • (массив) – преобразование в массив
  • (объект) – отбрасывается на объект
  • (unset) – отбрасывается до NULL (PHP 5)

Код:

 <? header( 'content-type: text/plain' ); $var = '10.1'; var_dump( (int)$var ); var_dump( (bool)$var ); var_dump( (float)$var ); var_dump( (string)$var ); var_dump( (array)$var ); var_dump( (object)$var ); var_dump( (unset)$var ); 

Вывод:

 int(10) bool(true) float(10.1) string(4) "10.1" array(1) { [0]=> string(4) "10.1" } object(stdClass)#1 (1) { ["scalar"]=> string(4) "10.1" } NULL 
 function is_number($s){ return in_array(str_replace(str_split('0123456789'), '', $s), array(',','.','')); }