【问题标题】:PHP creating multidimensional jsonPHP创建多维json
【发布时间】:2017-10-20 12:04:21
【问题描述】:

有简单的json

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

我想知道有没有办法像这样把它转换成json:

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

维度(级别)的数量是动态的。我尝试使用 dynamic variables' 名称,构建单元素 json 字符串 - 解码 - 合并。 我认为这些方法非常糟糕,但我没有找到任何其他方法方法来做到这一点。没关系,但这些方法甚至都无法正常工作。

【问题讨论】:

  • 您自己创建第一个 JSON 吗?如果是,您应该从根目录开始并在那里修复它。
  • @roland-starke 不完全是。是自动生成的一维json(key-value,key-value...),无法控制。

标签: php arrays json multidimensional-array


【解决方案1】:

您需要递归地将项目添加到生成的多维数组中。像这样:

$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"
                        }
                    }
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2017-06-12
    • 2019-10-14
    • 2017-04-04
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多