在 PHP 中转置多维数组

新手上路,请多包涵

如何在 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]

?(ps。我不认为 12 嵌套 for loops 是这种情况下的最佳解决方案。)

原文由 Calvin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 272
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);
}

原文由 Codler 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏