2010-04-22 69 views
1

我在這裏搜索StackOverflow關於將字符串轉換爲實際值,我沒有找到。 我需要像做類似上述結果「的GetType」的功能,但我不能做到這一切:■如何獲取字符串內的值的實際類型?

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"; 

感謝所有:)

回答

4

1+ for Svisstack! ;)

下面是函數,如果有人希望它:

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."."; 

但是我工作的框架總是將輸入變量作爲字符串返回。

+1

你有一些額外的代碼。 '空'已經測試了一個空字符串。你爲什麼使用'|| $ striing ==「」'?另外,你正在將一個字符串轉換爲一個字符串。 PHP知道''「'是一個字符串。該行可以被重寫爲:'if(empty($ string))return「」'。另外,執行'return(bool)true/false'是沒有意義的。 'true'和'false'已經是布爾值;他們不需要被鑄造。 – ryeguy 2010-04-22 15:24:46

+0

謝謝ryeguy;) – CuSS 2010-04-22 15:29:55

5

你必須設法將其轉換中指定的順序:

  1. 檢查是雙
  2. 如果雙,這可能是一個整數,你必須轉換和比較這值。
  3. 如果不是,如果長度爲1,則爲char。
  4. 如果不是,則爲字符串。
  5. 如果字符串,請嘗試解析爲布爾值。

您不能使用gettype,因爲您可能會在字符串中得到字符串類型的十進制writed。

+0

謝謝,我會嘗試這種方式。是的,我知道,這就是爲什麼我想要這個功能;) – CuSS 2010-04-22 13:39:58

+0

問題,如果字符串有「12ab3」?它是正確的字符串?我怎麼知道字符串是否有字母數字字符? – CuSS 2010-04-22 13:46:29

+0

「12ab3」不是int,因爲有一個字母數字,那麼算法不會檢查它的雙倍,它們長度大於1,那麼這是字符串,並且不能將它解析爲bool。結果是字符串,而實際結果是字符串,因爲「12ab3」不是有效的數字。 – Svisstack 2010-04-22 14:41:16

相關問題