思路:从左往右在往下在往左在往上循环,循环一次后从下一个起点再次循环输出,直到所有的元素都已访问function spiralOrder($matrix) {
$start_m = 0;
$start_n = 0;
$list = [[0,1],[1,0],[0,-1],[-1,0]];
$res = [];
$m = count($matrix);
$n = count($matrix[0]);
//一层一层循环,当起点已经被访问则退出循环
while($matrix[$start_m][$start_n] !== false){
array_push($res,$matrix[$start_m][$start_n]);
$matrix[$start_m][$start_n] = false;
//每一次从左往右再往下再往左再往上,每访问一个元素标记此元素已访问。
foreach($list as $v){
while($matrix[$start_m+$v[0]][$start_n+$v[1]] !== false && $start_m+$v[0] >=0 && $start_m+$v[0] < $m && $start_n+$v[1] >=0 && $start_n+$v[1] < $n){
array_push($res,$matrix[$start_m+$v[0]][$start_n+$v[1]]);
$matrix[$start_m+$v[0]][$start_n+$v[1]] = false;
$start_m = $start_m+$v[0];
$start_n = $start_n+$v[1];
}
}
$start_n = $start_n+1;
}
return $res;
}