我希望做到以下几点:
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;
}
答案 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);