猿问

在PHP中转换多维数组

在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()?

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

也就是说,您将如何编写一个函数,以便:

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

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


交互式爱情
浏览 541回答 3
3回答

繁华开满天机

function transpose($array) {     array_unshift($array, null);     return call_user_func_array('array_map', $array); }或者如果您使用的是PHP5.6或更高版本:function transpose($array) {     return array_map(null, ...$array); }

慕妹3242003

有两个循环。function flipDiagonally($arr) {     $out = array();     foreach ($arr as $key => $subarr) {         foreach ($subarr as $subkey => $subvalue) {             $out[$subkey][$key] = $subvalue;         }     }     return $out; }

当年话下

我想你指的是数组转座子(列变成行,行变成列)。这是一个为你做这件事的函数(来源):function array_transpose($array, $selectKey = false) {     if (!is_array($array)) return false;     $return = array();     foreach($array as $key => $value) {         if (!is_array($value)) return $array;         if ($selectKey) {             if (isset($value[$selectKey])) $return[] = $value[$selectKey];         } else {             foreach ($value as $key2 => $value2) {                 $return[$key2][$key] = $value2;             }         }     }     return $return; }
随时随地看视频慕课网APP
我要回答