php
  • arrays
  • string
  • filter
  • 2012-11-12 40 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

    相关问题