如何反转多维数组?

时间:2011-11-22 12:07:17

标签: php multidimensional-array

我有一个包含n个元素的数组,每个元素包含n个子元素,每个子元素都包含...

Array
(
    [tea] => Array
        (
            [drink] => Array
                (
                    [food] => 
                )
        )
    [biscuits] => Array
        (
            [snack] => Array
                (
                    [food] => 
                )
        )
    ...
)

我想做的是在外面有最里面的元素,在里面有最外面的元素:

Array
(
    [food] => Array
        (
            [drink] => Array
                (
                    [tea] => 
                )
            [snack] => Array
                )
                    [biscuits] => 
                (
        )
    ...
)

解决方案需要能够处理n个子数组。我知道How do I invert a multidimensional array in PHP,但那里的解决方案并没有解决这个问题。

1 个答案:

答案 0 :(得分:4)

我很确定这可以进一步浓缩,但它可以完成这项工作:

function flatten(array $array) {
    $key = array(key($array));
    $val = current($array);
    if (is_array($val)) {
        $key = array_merge(flatten($val), $key);
    }
    return $key;
}

function build(array $path, array $result) {
    $key = array_shift($path);
    if (!isset($result[$key])) {
        $result[$key] = $path ? array() : null;
    }
    if ($path) {
        $result[$key] = build($path, $result[$key]);
    }
    return $result;
}

$result = array();
foreach ($array as $key => $value) {
    $result = build(flatten(array($key => $value)), $result);
}

演示:http://codepad.org/rnZPdWGG