php var_export()した後の文字列を元に戻す(eval())

jsonを修正して、jsonに戻したい(※括弧の数とかあまり考えたくない)

作成日:2021-02-15, 更新日:2021-02-15

基本

eval()関数で文字列を評価すれば良いらしい

// 下準備
$seed = array(
  'hoge1' => 'val1',
  'hoge2' => 'val2',
);
$conv_seed = var_export($seed, true);

// var_export()した後の文字列を元に戻す
eval('$restore = ' . $conv_seed . ';');
// var_export($restore); // ←元の配列になっている

経緯

下記のような状況になってしまった
1.jsonがある
2.json_decode()を出力した結果を見ていた
3.一部改修したくなった
4.しかも、元のソースはいじらずにjsonだけ修正したい
5.でも、良い感じに修正するには面倒
6.json_decode()を出力した結果から配列に戻せるなら良いなぁ・・・

流れ

1.jsonを展開して出力
2.好きに修正する
3.「2」を読み込んで配列に変換してからjsonに戻す

1.jsonを展開して出力

▼ひとまずどっかでjson_decode()を出力して、好きに修正した文字列を用意

$json = 〇〇〇〇〇;
var_export(json_decode($json, true));

▼こんな感じの出力結果

array (
  'hoge' =>
  array (
    0 =>
    array (
      'foo' => '〇〇〇〇',
    ),
  ),
)

2.好きに修正する

いらない何かを消したり、追加したりする。

3.「2」を読み込んで配列に変換してからjsonに戻す

$seed = 〇〇〇〇;
eval('$conv_ary = ' . $seed . ';');
$json = json_encode($conv_ary);