PHP逆时针旋转矩阵

Cri*_*sty 3 php arrays matrix

我正在解决一个更大的问题,一步我需要逆时针旋转一个二维阵列.

所以,如果我有这个矩阵:

1 2 3 4
1 2 3 4
3 4 5 6
3 4 5 6
Run Code Online (Sandbox Code Playgroud)

轮换后它将是:

4 4 6 6
3 3 5 5
2 2 4 4
1 1 3 3
Run Code Online (Sandbox Code Playgroud)

我找到了顺时针旋转它的解决方案:

<?php    
$a = array(array(1,2,3,4),array(5,6,7,8),array(9,0,1,2),array(3,4,5,6));
$b = array(); //result

while(count($a)>0)
{
    $b[count($a[0])-1][] = array_shift($a[0]);
    if (count($a[0])==0)
    {
         array_shift($a);
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

问题是,即使a是单维或只有一个元素,它也必须工作.

所以,1 2 3 4将成为:

4
3
2
1
Run Code Online (Sandbox Code Playgroud)

sal*_*the 12

$b = call_user_func_array(
    'array_map',
    array(-1 => null) + array_map('array_reverse', $a)
);
Run Code Online (Sandbox Code Playgroud)

我将把它作为练习让读者弄清楚它是如何工作的.

  • @Cristy在手册中看到了"[创建数组数组](http://php.net/manual/en/function.array-map.php#example-4844)"的示例.你的代码本质上调用`array_map(null,[2,1],[3,2],[4,3])`,它返回`[[2,3,4],[1,2,3]]`. (2认同)
  • 有趣的方法!如果你想顺时针旋转它,可以用`$ a`替换`array_map('array_reverse',$ a)`. (2认同)