2017-10-20 21 views
0

シンプルなJSONがありますPHP作成多次元JSON

{"level1_level2_blah": "some value", "level1_level_2 ... _level9999_blah": "hello world"} 

私はそのようにJSONに変換する方法があるかどうかを知りたいのです:

{"level1": {"level2": {"blah": "some value"}, ... }}} 

寸法(レベル)の数ですが、動的。私は動的変数 'の名前、単一要素json文字列を構築することを試みました - それをデコード - マージします。私はこれらの方法が本当にひどいと思うが、それを行うための他の方法は見つけられなかった。これらのメソッドは正しく動作しませんでした。

+0

$output = []; $input = [ 'foo' => 'bar', 'a_b_c' => 'test', 'a_b_d' => 'foo', 'bar_foo' => 'taz', 'a_x_y_z_xiv' => '99', 'bar_bar_bar_bar_bar_bar_bar' => 'foo', 'a_b_e' => 'bar' ]; function add_to_array(&$array, $key, $value) { if (is_array($key) && sizeof($key) > 1) { $keyPart = array_shift($key); if (!array_key_exists($keyPart, $array)) { $array[$keyPart] = []; } add_to_array($array[$keyPart], $key, $value); } else { $array[is_array($key)?$key[0]:$key] = $value; } } foreach ($input as $key => $value) { add_to_array($output, explode('_', $key), $value); } echo json_encode($output, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE), PHP_EOL; 

結果、あなたが最初にJSONを自分で作成してください:このような?はいの場合は、ルートから開始してそこに修正する必要があります。 –

+0

@ roland-starke正確ではありません。これは自動生成された1次元json(キー値、キー値...)であり、制御することはできません。 –

答えて

0

結果の多次元配列に項目を再帰的に追加する必要があります。

{ 
    "foo": "tar", 
    "a": { 
     "b": { 
      "c": "test", 
      "d": "foo", 
      "e": "bar" 
     }, 
     "x": { 
      "y": { 
       "z": { 
        "xiv": "99" 
       } 
      } 
     } 
    }, 
    "bar": { 
     "foo": "taz", 
     "bar": { 
      "bar": { 
       "bar": { 
        "bar": { 
         "bar": { 
          "bar": "foo" 
         } 
        } 
       } 
      } 
     } 
    } 
} 
関連する問題