<?php

function transpose($array) 
{
    if (count($array) === 0) return $array;
	$out = [];
    foreach ($array as  $rowkey => $row)
    {
        foreach($row as $colkey => $col)
        {
            $out[$colkey][$rowkey] = $col;
        }
    }

    return $out;
}

function f($a)
{
    return (count($a) === 0) 
    ? [] 
    : array_merge(
        array_shift($a), 
        f(array_reverse(transpose($a)))
    );
}

print_r(f([[1,2,3,4],[10,11,12,5],[9,8,7,6]]));