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

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);
    }
}
于 2012-11-12T08:35:31.220 に答える