<?php
 
    function spiralmatrix($arr)
    {
    	return  $arr 
    			? array_merge(
    					array_shift($arr), 
    					spiralmatrix(array_reverse(transpose($arr)))
    			)
    			: $arr;
    }
 
	function transpose($arr)
	{ 
	    return $arr
	    		? count($arr) == 1
    				? array_chunk($arr[0], 1) 
    				: array_map(null, ...$arr)
    			: $arr;
	}

print_r(spiralmatrix([]));
print_r(spiralmatrix([[1]]));
print_r(spiralmatrix([[1,2],[4,3]]));
print_r(spiralmatrix([[1,2,3],[8,9,4],[7,6,5]]));
print_r(spiralmatrix([[1,2,3,4],[12,13,14,5],[11,16,15,6],[10,9,8,7]]));
print_r(spiralmatrix([[1,2,3,4],[10,11,12,5],[9,8,7,6]]));