Как вывести числа от 1 до 10 равномерно в 3 колонки?
function splitByCols($array, $columnsQuantity=3) {
    $splitted = [];
    $rows = floor(count($array)/$columnsQuantity);
    $offset = 0;
    $modulo = count($array)%$columnsQuantity;
    
    
    // Разделение по строкам
    for ($i=0; $i<$columnsQuantity; $i++) {
        $length = ($i<$modulo ? $rows+1 : $rows);
        $columns[] = array_slice($array, $offset, $length);
        $offset += $length;
    }
    
    
    // Поворот на 90 градусов
    foreach ($columns as $columnIndex=>$rows) {
        foreach ($rows as $rowIndex=>$field) {
            $splitted[$rowIndex][$columnIndex] = $field;
       }
    }
    
    
    return $splitted;
}


// Проверка
$input = range(1,14);
$splitted = splitByCols($input);

foreach ($splitted as $row) {
    echo implode(" ", $row);
    echo PHP_EOL;
}



/*
Output:
1 6 11
2 7 12
3 8 13
4 9 14
5 10
*/
Идея: сначала создать двумерную матрицу из последовательности, а затем транспонировать её.
Ну и примерное решение:// Functions
function matrixFromRange($begin, $end, $cols)
{
    $matrix = range($begin, $end);
    $result = [];
    $i      = 0;
    $chunk  = ceil(count($matrix) / $cols);
    foreach ($matrix as $el) {
        $result[$i][] = $el;
        if (!($el % $chunk)) $i++;
    }

    return $result;
}

function matrixTranspond(array $matrix = [])
{
    $result = [];
    foreach ($matrix as $i => $j)
        foreach ($j as $k => $m)
            $result[$k][$i] = $m;

    return $result;
}

function matrixEcho(array $matrix = [], $rowsGlue = ' ', $colsGlue = PHP_EOL)
{
    foreach ($matrix as $el)
        echo implode($rowsGlue, $el) . $colsGlue;
}

// Config
$numBegin     = 1;
$numEnd       = 25;
$cols         = 3;
$joinRowsWith = ' ';
$joinColsWith = PHP_EOL;

// Testing
$matrix = matrixFromRange($numBegin, $numEnd, $cols);
$transponded = matrixTranspond($matrix);
matrixEcho($transponded);