[英]PHP creating multidimensional json
有一個簡單的json
{"level1_level2_blah": "some value", "level1_level_2 ... _level9999_blah": "hello world"}
我想知道是否有辦法將其轉換為json:
{"level1": {"level2": {"blah": "some value"}, ... }}}
尺寸(級別)的數量是動態的。 我嘗試使用動態變量的名稱, 構建單元素json字符串-對其進行解碼-合並。 我認為這些方法確實很糟糕,但是我沒有找到其他方法來做到這一點。 沒關系,但是這些方法甚至無法正常工作。
您需要將項目遞歸地添加到生成的多維數組中。 像這樣:
$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"
}
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.