1. <?php
    2. class Solution {
    3. public function generateMatrix($n) {
    4. if ($n <= 0) {
    5. return [];
    6. }
    7. $forwards = ['R', 'D', 'L', 'U'];
    8. $forward = 'R';
    9. $minI = $minJ = 0;
    10. $maxI = $maxJ = $n - 1;
    11. $num = 1;
    12. $ret = [];
    13. while($num <= pow($n, 2)) {
    14. if ($forward == 'R') {
    15. for ($j = $minJ; $j <= $maxJ; $j++) {
    16. $ret[$minI][$j] = $num++;
    17. }
    18. $minI++;
    19. } elseif ($forward == 'D') {
    20. for ($i = $minI; $i <= $maxI; $i++) {
    21. $ret[$i][$maxJ] = $num++;
    22. }
    23. $maxJ--;
    24. } elseif ($forward == 'L') {
    25. for ($j = $maxJ; $j >= $minJ; $j--) {
    26. $ret[$maxI][$j] = $num++;
    27. }
    28. $maxI--;
    29. } else {
    30. for ($i = $maxI; $i >= $minI; $i--) {
    31. $ret[$i][$minJ] = $num++;
    32. }
    33. $minJ++;
    34. }
    35. // 修改方向
    36. $forward = $forwards[(array_search($forward, $forwards) + 1) % 4];
    37. }
    38. return $ret;
    39. }
    40. }
    41. $n = 5;
    42. $cls = new Solution();
    43. $r = $cls->generateMatrix($n);
    44. array_walk($r, function (&$v) {
    45. ksort($v);
    46. $v = implode(',', $v);
    47. });
    48. print_r($r);