将数组转换为多维数组

时间:2018-02-24 23:24:31

标签: php arrays multidimensional-array

我有一个看起来像这样的数组:

array:2 [
    "test1_test2_test3" => "result"
    "category_slug" => "the_slug"
]

我需要做的是将其转换为多维数组,如下所示:

array:2 [
    "test1" => [
        "test2" => [
            "test3" => "result"
        ]
    ]
    "category" => [
        "slug" => "the_slug"
    ]
]

我知道我可以explode获取一个数组,但我不确定如何从最终得到最终结果。

编辑该数组最初看起来像是因为它是从请求参数中提取的:http://url.com?test1.test2.test3=result&category.slug=the_slug而Laravel会自动将其转换为数组。

3 个答案:

答案 0 :(得分:0)

我的方法是反转数组,然后遍历键并嵌套它们。

下面的代码可以解决问题。

Field

答案 1 :(得分:0)

一种方法:

$arr = array("test1_test2_test3" => "result", "category_slug" => "the_slug");
$res = array();

foreach($arr as $k=>$v) {

        $t = explode("_", $k);
        $new_arr = array();
        $tmp = $v; 
        for($i=count($t)-1; $i > 0; $i--) {
                $new_arr[$t[$i]] = $tmp;
                $tmp = $new_arr;
                $new_arr = array();
        }

        $res[$t[0]] = $tmp;

}

print_r($res);

结果:

Array
(
    [test1] => Array
        (
            [test2] => Array
                (
                    [test3] => result
                )

        )

    [category] => Array
        (
            [slug] => the_slug
        )

)

答案 2 :(得分:0)

通过Laravel文档,我发现了一个帮助器array_set,这意味着为了将密钥更改为多维数组,我可以更改密钥以使用带有str_replace的点表示法然后使用帮助程序转换它:

$array = [
    "test1_test2_test3" => "result"
    "category_slug" => "the_slug"
]

$new_array = []

foreach($array as $key => $value)
{
    $key = str_replace('_', '.', $key);
    array_set($new_array, $key, $value);
}

结果:

array:2 [
    "test1" => [
        "test2" => [
            "test3" => "result"
        ]
    ]
    "category" => [
        "slug" => "the_slug"
    ]
]