Как получить реальный тип значения внутри строки? - PullRequest
1 голос
/ 22 апреля 2010

Я искал здесь в StackOverflow о преобразовании строки в реальное значение, но я не нашел. Мне нужна функция типа "gettype", которая делает что-то вроде результата, описанного выше, но я не могу сделать все это: s

gettypefromstring("1.234"); //returns (doble)1,234;
gettypefromstring("1234"); //returns (int)1234;
gettypefromstring("a"); //returns (char)a;
gettypefromstring("true"); //returns (bool)true;
gettypefromstring("khtdf"); //returns (string)"khtdf";

Спасибо всем:)

Ответы [ 2 ]

6 голосов
/ 22 апреля 2010

1 + для Свистстака! ;)

Вот функция, если кто-то хочет:

function gettype_fromstring($string){
    //  (c) José Moreira - Microdual (www.microdual.com)
    return gettype(getcorrectvariable($string));
}
function getcorrectvariable($string){
    //  (c) José Moreira - Microdual (www.microdual.com)
    //      With the help of Svisstack (http://stackoverflow.com/users/283564/svisstack)

    /* FUNCTION FLOW */
    // *1. Remove unused spaces
    // *2. Check if it is empty, if yes, return blank string
    // *3. Check if it is numeric
    // *4. If numeric, this may be a integer or double, must compare this values.
    // *5. If string, try parse to bool.
    // *6. If not, this is string.

    $string=trim($string);
    if(empty($string)) return "";
    if(!preg_match("/[^0-9.]+/",$string)){
        if(preg_match("/[.]+/",$string)){
            return (double)$string;
        }else{
            return (int)$string;
        }
    }
    if($string=="true") return true;
    if($string=="false") return false;
    return (string)$string;
}

Я использовал эту функцию, чтобы узнать, кратно ли число X Y.

Пример:

$number=6;
$multipleof=2;
if(gettype($number/$multipleof)=="integer") echo "The number ".$number." is multiple of ".$multipleoff.".";

Но структура, которую я работаю, всегда возвращает входные переменные в виде строк.

5 голосов
/ 22 апреля 2010

Вы должны попытаться преобразовать его в указанном порядке:

  1. Чек двойной
  2. Если double, это может быть целое число, вы должны преобразовать и сравнить эти значения.
  3. Если нет, то это символ, если длина == 1.
  4. Если нет, то это строка.
  5. Если строка, попробуйте parse to bool.

Вы не можете использовать gettype, потому что вы можете получить строковый тип десятичного числа, записанный в строке.

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