1. <?php
    2. class Solution {
    3. /**
    4. * 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
    5. * @param Integer[][] $matrix
    6. * @return Integer[]
    7. */
    8. public function spiralOrder($matrix) {
    9. if (!$matrix) return [];
    10. $m = count($matrix);
    11. $n = count($matrix[0]);
    12. $ret[] = $matrix[0][0];
    13. $j = $i = 0;
    14. do {
    15. if (isset($matrix[$i][$j + 1])) { // 右
    16. $ret[] = $matrix[$i][++$j];
    17. } elseif (isset($matrix[$i + 1][$j])) { // 下
    18. $ret[] = $matrix[++$i][$j];
    19. } elseif (isset($matrix[$i][$j - 1])) { // 左
    20. $ret[] = $matrix[$i][--$j];
    21. } elseif (isset($matrix[$i - 1][$j])) { // 上
    22. $ret[] = $matrix[--$i][$j];
    23. } else {
    24. break;
    25. }
    26. unset($matrix[$i][$j]);
    27. } while (count($ret) < $m * $n);
    28. return $ret;
    29. }
    30. }
    31. $matrix = [
    32. [1, 2, 3, 4],
    33. [5, 6, 7, 8],
    34. [9,10,11,12]
    35. ];
    36. $cls = new Solution();
    37. $r = $cls->spiralOrder($matrix);
    38. print_r($r);