将子数组值合并到数组中的单个数组中

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);