在PHP中翻转二维关联数组

Rai*_*616 7 php algorithm associative-array multidimensional-array

我需要将父母的一系列父母转变成一系列儿童的父母.例如,我有一个这样的数组:

[
    1 => [a,b,c],
    2 => [b,c,d],
    3 => [c,d,e],
]
Run Code Online (Sandbox Code Playgroud)

我想把它变成这样:

[
    a => [1],
    b => [1,2],
    c => [1,2,3],
    d => [2,3],
    e => [3]

]
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用嵌套的foreach循环的情况下完成此任务?如果没有,最有效的方法是什么?

提前致谢!

Rom*_*est 6

简短的解决方案使用array_merge_recursive,array_combine并且array_fill功能:

$arr = [
    1 => ['a','b','c'],
    2 => ['b','c','d'],
    3 => ['c','d','e'],
];

$result = [];
foreach ($arr as $k => $v) {
    $result = array_merge_recursive($result, array_combine($v, array_fill(0, count($v), [$k])));
}

print_r($result);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [a] => Array
        (
            [0] => 1
        )

    [b] => Array
        (
            [0] => 1
            [1] => 2
        )

    [c] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [d] => Array
        (
            [0] => 2
            [1] => 3
        )

    [e] => Array
        (
            [0] => 3
        )
)
Run Code Online (Sandbox Code Playgroud)