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 代码等

4

2 回答 2

2

与其依赖一些神奇的正则表达式,我会走一条更简单的路线,用它token_get_all()来标记字符串并创建一个非常基本的解析器,它可以基于两种数组构造方法创建必要的结构。

我不认为很多人自己推出了这个,但它可能是最稳定的解决方案。

于 2012-11-12T08:55:15.003 回答
1

使用evalpreg_match_all这样的组合:

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

只要您的数组不包含)但可以进一步修改以处理这种情况,这将起作用

或者正如杰克建议的那样使用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);
    }
}
于 2012-11-12T08:35:31.220 回答