我有一个包含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,但那里的解决方案并没有解决这个问题。
答案 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);
}