В общем случае - составить две формулы, получение номера столбца и номера в столбце и использовать их в usort.
В данном случае вторая формула не нужна, поскольку внутри столбца порядок сортировки стандартный.
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
usort(
$arr,
function (int $a, int $b): int {
$result = (($a - 1) % 6) - (($b - 1) % 6);
return $result === 0 ? $a - $b : $result;
}
);
print_r($arr);
/* Array
(
[0] => 1
[1] => 7
[2] => 13
[3] => 2
[4] => 8
[5] => 14
[6] => 3
[7] => 9
[8] => 15
[9] => 4
[10] => 10
[11] => 16
[12] => 5
[13] => 11
[14] => 17
[15] => 6
[16] => 12
[17] => 18
) */