我有一个像这样的字符串
$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代码等
答案 0 :(得分:2)
我没有依赖一些神奇的正则表达式,而是使用token_get_all()
标记字符串并创建一个非常基本的解析器,它可以根据两种数组构造方法创建必要的结构。 / p>
我认为很多人都没有自己动手,但这可能是最稳定的解决方案。
答案 1 :(得分:1)
使用eval
和preg_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);
}
}