您需要遞歸添加項目到生成的多維數組。就像這樣:
$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;
結果
{
"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"
}
}
}
}
}
}
}
你創建的第一個JSON自己呢?如果是的話,你應該從根開始並修復它。 –
@ roland-starke不完全。它是一個自動生成的單維json(鍵值,鍵值...),不能被控制。 –