从字符串php读取数组

时间:2012-11-12 08:34:05

标签: php arrays string filter

我有一个像这样的字符串

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

2 个答案:

答案 0 :(得分:2)

我没有依赖一些神奇的正则表达式,而是使用token_get_all()标记字符串并创建一个非常基本的解析器,它可以根据两种数组构造方法创建必要的结构。 / p>

我认为很多人都没有自己动手,但这可能是最稳定的解决方案。

答案 1 :(得分: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);
    }
}