反转行和列2d数组

时间:2015-07-24 09:46:38

标签: php json

我希望做到以下几点:

1  2  3      
4  5  6      1 4 7 10 13
7  8  9   => 2 5 8 11 14
10 11 12     3 6 8 12 15
13 14 15

试图找到更好的方法来做到这一点。我在SO上看了一下,但我能找到的最接近的是对角线反转的解决方案。

2D倒置后,它将转换为JSON格式并发送到客户端。现在(没有倒转算法)它看起来像这样。

[
 [1, 2, 3]
 [4, 5, 6]
 [7, 8, 9]
 [10, 11, 12]
 [13, 14, 15]
]
转换算法后,它应该是这样的:

[
 [1, 4, 7, 10, 13]
 [2, 5, 8, 11, 14]
 [3, 6, 8, 12, 15]
]

我目前的解决方案是:

static function invert($arr){
  $res = array();
  for($i = 0; $i < count($arr); $i++){
    $row = $arr[$i];
    for($j = 0; $j < count($row); $j++){
      if(isset($res[$j])){
        array_push($res[$j], $row[$j]);
      }else{
        $res[$j] = array($row[$j]);
      }
    }
  }
  return $res;
}

1 个答案:

答案 0 :(得分:2)

你所看到的是一个转置,有一个奇怪的PHP快捷方式http://codepen.io/Luchadora/pen/waYzMZ使得它很容易执行:

$data = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [10, 11, 12],
  [13, 14, 15],
];

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

$result = transpose($data);
var_dump($result);