1

次の形式の多次元配列の出力があります。

Array
(
[MiddleName] => de
[FirstName] => Lianne
[Id] => 2937
[LastName] => Natris
)
Array
(
[MiddleName] => de
[FirstName] => Herman
[Id] => 2215
[LastName] => Groot
)

APIで遊んでユーザーデータをめちゃくちゃにしてしまったので、今すぐ修正する必要があります。この出力は、私が残した唯一の正しいデータです。API 更新機能は次のように機能します。

$grp = array('LastName' => 'John', 'MiddleName' => 'van'); 
$rID = $app->dsUpdate("Contact", $cID, $grp);

この出力を解析してマルチアレイに戻すにはどうすればよいですか? 私は正規表現の知識が非常に限られています:((

前もって感謝します!

4

1 に答える 1

0

The output of print_r() is not really suitable to "reverse engineer" the original structure.

If you wish to just work with string representations, you could use serialize() and unserialize() for that instead.

// turn array into a string format
$str = serialize($arr);

// get it back into an array
var_dump(unserialize($str));

You could also look at var_export(), if you want to write the structure into a script file (like a simple cache) or json_encode() and json_decode() if the structure needs to be shared with JavaScript for instance.

Update

If you really have no choice:

$arrays = array();
if (preg_match_all('/^Array\s*\((.*?)\)/ms', $s, $matches)) {
  foreach ($matches[1] as $match) {
    if (preg_match_all('/\[([^]]+)\] => (.*)/', $match, $params)) {
      $arrays[] = array_combine($params[1], $params[2]);
    }
  }
  print_r($arrays);
} else {
  die("Arrrrgh");
}

Demo

于 2013-02-28T02:20:17.427 に答える