Когда я беру данные из базы данных, результатом является строка, даже если она имеет числовое значение. Вот что я имею в виду:
// 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/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" }
Пример (попробуйте свои собственные входы и посмотрите, как он встает)
Переместите переменную в нужный вам тип.
Разрешенными являются:
Код:
<? 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(',','.','')); }