在 PHP 中转置多维数组

2022-08-30 08:14:16

你会如何在PHP中翻转90度(转置)一个多维数组?例如:

// Start with this array
$foo = array(
    'a' => array(
       1 => 'a1',
       2 => 'a2',
       3 => 'a3' 
    ),
    'b' => array(
       1 => 'b1',
       2 => 'b2',
       3 => 'b3' 
    ),
    'c' => array(
       1 => 'c1',
       2 => 'c2',
       3 => 'c3' 
    )
);

$bar = flipDiagonally($foo); // Mystery function
var_dump($bar[2]);

// Desired output:
array(3) {
  ["a"]=>
  string(2) "a2"
  ["b"]=>
  string(2) "b2"
  ["c"]=>
  string(2) "c2"
}

您将如何实现?flipDiagonally()

编辑:这不是家庭作业。我只是想看看是否有任何SOers比最明显的路线更有创意的解决方案。但是,由于有些人抱怨这个问题太容易了,那么使用n维数组的更通用的解决方案呢?

即,您将如何编写一个函数,以便:

$foo[j][k][...][x][y][z] = $bar[z][k][...][x][y][j]

?(附言。在这种情况下,我不认为12嵌套是最好的解决方案。for loops


答案 1
function transpose($array) {
    array_unshift($array, null);
    return call_user_func_array('array_map', $array);
}

或者,如果您使用的是 PHP 5.6 或更高版本:

function transpose($array) {
    return array_map(null, ...$array);
}

答案 2

有 2 个循环。

function flipDiagonally($arr) {
    $out = array();
    foreach ($arr as $key => $subarr) {
        foreach ($subarr as $subkey => $subvalue) {
            $out[$subkey][$key] = $subvalue;
        }
    }
    return $out;
}