将子数组值与一个数组合并为一个数组

时间:2019-04-08 15:01:19

标签: php arrays sub-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 } 
    } 
} 

我从外部来源获得此数组,因此我需要优化这种使用方式。

1 个答案:

答案 0 :(得分:0)

从外部源获取的数组就像需要合并到单个树中的一组独立分支。您可以使用递归函数来创建要使用的“优化”结构。无论每个分支的深度如何,都应使用递归方法。

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