2014-11-05 30 views
-2

我真的找一個功能,可以幫助我轉換值像這樣(的var_dump後):PHP的字符串轉換爲正確的類型

字符串(2)「49」整數 或字符串(3)「1.2 「 浮。

this不爲我工作 感謝

這裏是我的代碼: 我只是有一個遞歸函數來檢查我的數組

  foreach($arr as $key => $value) 
      { 
       if(is_array($value)) 
       { 
        $this->__set_types($value); 
       } 
       if(is_numeric($value)) 
       { 
        echo getcorrectvariable($value); 
        $arr[$key] = settype($value, gettype_fromstring($value)); 
        var_dump($arr); 
       } 
      } 

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 (https://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; 
} 

這裏的所有元素是我的陣列中的一個PICE (的var_dump)

array(3) { 
    [0]=> 
    array(3) { 
    [0]=> 
    array(9) { 
     ["id"]=> 
     string(3) "106" 
     ["idMessageType"]=> 
     string(1) "1" 
     ["idClientSender"]=> 
     string(2) "59" 
     ["idClientRecipient"]=> 
     string(2) "49" 
     ["message"]=> 
     string(5) "rwert" 
     ["creationTimeStamp"]=> 
     string(22) "2014-11-04 10:09:12+05" 
     ["readingTimestamp"]=> 
     NULL 
     ["status"]=> 
     string(1) "1" 
     ["isMessageActive"]=> 
     string(1) "t" 
    } 
    [1]=> 
    array(9) { 
     ["id"]=> 
     string(3) "105" 
     ["idMessageType"]=> 
     string(1) "1" 
     ["idClientSender"]=> 
     string(2) "59" 
     ["idClientRecipient"]=> 
     string(2) "49" 
     ["message"]=> 
     string(7) "qwrqewr" 
     ["creationTimeStamp"]=> 
     string(22) "2014-11-04 10:08:56+05" 
     ["readingTimestamp"]=> 
     NULL 
     ["status"]=> 
     string(1) "1" 
     ["isMessageActive"]=> 
     string(1) "t" 
    } 
    ["client"]=> 
    array(4) { 
     ["id"]=> 
     string(2) "49" 
     ["name"]=> 
     string(12) "а аАаВаИаЛб" 
     ["surname"]=> 
     string(14) "ааАбаИаПаОаВ" 
     ["photoName"]=> 
     string(50) "49.jpg           " 
    } 
    } 
+0

爲什麼它不起作用?什麼是字符串,結果是什麼類型?你可以添加一些代碼嗎? – 2014-11-05 20:43:00

+0

我已更新我的問題 – 2014-11-05 20:49:21

+0

不,但它必須是方式 – 2014-11-05 21:15:21

回答

1

floatval或intval將分別做你想問的問題。

如果你要檢索的類型...... doesn't道理給我,但你可以使用正則表達式...這裏做一個自定義函數:

function getTypedNumber($string) 
{ 
$pattern = '/^(\d{1,3})((,)(\d{3}))*((\.)(\d{1,2}))?$|^(\d{1,3})((\.)(\d{3}))*((,)(\d{1,2}))?$/'; 
$replacement = '\1\8\4\11.\7\14'; 
$number = preg_replace($pattern, $replacement,$string); 
if (is_numeric($number){ 
if (strpos($number, ".") === false) return intval($number); 
else return floatval($number); 
} 
else return false; 
} 

它會在這個過程中數格式10.300,25或10,300.25以及

編輯

忘記,該正則表達式的工作假設2位小數,它可以很容易地改變,如果需要的話,但後來它不需額外過程法文/英文編號樣式

+0

等待,但我怎麼知道它是否浮動或int? – 2014-11-05 20:50:59

+0

errr ...將其保存到變量? :S – sergio0983 2014-11-05 20:52:19

+0

對不起,認爲當返回intval或floatval時顯而易見....可以將相同的函數改爲返回「float」或「int」而不是intval或floatval,以便獲取類型。 – sergio0983 2014-11-05 20:54:00

0

快速的解決方案:

intval("42") // -> 42 
intval("53.4") // -> 53 
floatval("53.4") // -> 53.4 

爲什麼不首先使用Google搜索「php parse float」?

+0

浮點數也將作爲int,所以您可以一直使用'floatval'(除非該類型被明確地聲明爲int)。 – ciuak 2014-11-05 20:49:12

+0

我不知道我的var的類型 – 2014-11-05 20:49:49

+0

'floatval'會接受任何東西,只是爲了解析它。 – ciuak 2014-11-05 20:50:30

相關問題