簡體   English   中英

PHP創建多維JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM