将子数组值合并到数组中的单个数组中
Combine Sub-array values into a single array withing an array
我可能没有正确表达这个问题,所以这是我正在努力实现的目标。
array {
[0]=> {
["Abilities"]=> { ["Numerical"]=> 3 }
}
[1]=> {
["Abilities"]=> { ["Verbal"]=> 1 }
}
[2]=> {
["Domain"]=> { ["Programming"]=> 0 }
}
}
至
array {
[0]=> {
["Abilities"]=> { ["Numerical"]=> 3 ["Verbal"]=> 1 }
}
[1]=> {
["Domain"]=> { ["Programming"]=> 0 }
}
}
我从外部来源获取此数组,因此我需要以这种方式进行优化才能使用它。
您从外部源获取的数组就像一组单独的分支,您需要合并到一棵树中。您可以使用递归函数来创建您想要的 "optimized" 结构。无论每个分支的深度如何,递归方法都应该有效。
function merge_branches(array $branches): array
{
$merge = function ($node, &$tree) use (&$merge) {
if (is_array($value = reset($node))) {
$merge($value, $tree[key($node)]); // merge branch node recursively
} else {
$tree[key($node)] = $value; // set leaf node to value
}
};
$tree = [];
foreach ($branches as $branch) {
$merge($branch, $tree);
}
return $tree;
}
$optimized = merge_branches($external);
我可能没有正确表达这个问题,所以这是我正在努力实现的目标。
array {
[0]=> {
["Abilities"]=> { ["Numerical"]=> 3 }
}
[1]=> {
["Abilities"]=> { ["Verbal"]=> 1 }
}
[2]=> {
["Domain"]=> { ["Programming"]=> 0 }
}
}
至
array {
[0]=> {
["Abilities"]=> { ["Numerical"]=> 3 ["Verbal"]=> 1 }
}
[1]=> {
["Domain"]=> { ["Programming"]=> 0 }
}
}
我从外部来源获取此数组,因此我需要以这种方式进行优化才能使用它。
您从外部源获取的数组就像一组单独的分支,您需要合并到一棵树中。您可以使用递归函数来创建您想要的 "optimized" 结构。无论每个分支的深度如何,递归方法都应该有效。
function merge_branches(array $branches): array
{
$merge = function ($node, &$tree) use (&$merge) {
if (is_array($value = reset($node))) {
$merge($value, $tree[key($node)]); // merge branch node recursively
} else {
$tree[key($node)] = $value; // set leaf node to value
}
};
$tree = [];
foreach ($branches as $branch) {
$merge($branch, $tree);
}
return $tree;
}
$optimized = merge_branches($external);