php
  • arrays
  • string
  • filter
  • 2012-11-12 80 views 1 likes 
    1

    我有這樣讀陣列

    $php_string = '$user["name"] = "Rahul";$user["age"] = 12;$person["name"] = "Jay";$person["age"] = 12;'; 
    

    或類似這樣的

    $php_string = '$user = array("name"=>"Rahul","age"=>12);$person= array("name"=>"Jay","age"=>12);'; 
    

    我需要從字符串數組字符串,

    期望的結果是

    print_r($returned); 
    
    Array 
    (
        [name] => Rahul 
        [age] => 12 
    ) 
    

    請注意,有可能是在包括註釋,其他的PHP代碼等

    +1

    似乎是'eval()'的情況,但前提是您確信這是唯一的方法。 –

    +0

    @Jack我不想執行這個腳本, – Red

    +0

    你到目前爲止試過的任何東西? – xbonez

    回答

    1

    使用和preg_match_alleval組合,像這樣的字符串的內容:

    if(preg_match_all('/array\s*\(.*\)/U', $php_string, $arrays)){ 
        foreach($arrays as $array){ 
         $myArray = eval("return {$array};"); 
         print_r($myArray); 
        } 
    } 
    

    這將工作,只要你的數組沒有按「T包含),但可以進一步進行修改,以處理這種情況

    或傑克建議使用token_get_all()像這樣:

    $tokens = token_get_all($php_string); 
    if(is_array($tokens)){ 
        foreach($tokens as $token){ 
         if($token[0] != T_ARRAY)continue; 
         $myArray = eval("return {$token[1]};"); 
         print_r($myArray); 
        } 
    } 
    
    +2

    但我認爲'eval'會執行腳本,也可能有其他一些代碼,所以需要基於字符串的操作。 – Red

    +0

    你可以改進上面的正則表達式來允許'('和')'它應該爲你工作 –

    +0

    感謝您的開始,我會嘗試修改代碼併發布重新定義的代碼,尤其是PHP5的新數組方法。 – Red

    2

    而不是依靠一些神奇的正則表達式,我會走一個稍微簡單的路線,並使用token_get_all()標記字符串並創建一個非常基本的解析器,可以創建基於這兩種數組構造方法的必要結構。

    我不認爲很多人自己推出了這個,但它可能是最穩定的解決方案。

    +0

    感謝您的信息,我不知道這個功能,我會檢查.. – Red

    相關問題