Как отсортировать массив в php?
В общем случае - составить две формулы, получение номера столбца и номера в столбце и использовать их в 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
) */
Подели сначала на 3 отдельных массива
1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17 18

Потом из каждого массива бери сначала первый элемент, затем второй и т.д.