<?php

error_reporting(-1);
mb_internal_encoding('utf-8');

$text =
    "Дым табачный воздух выел.
Комната -
глава в крученыховском аде.
Вспомни -
за этим окном
впервые
руки твои, исступлённый, гладил.
Сегодня сидишь вот,
сердце в железе.
День ещё -
выгонишь,
может быть, изругав.
В мутной передней долго не влезет
сломанная дрожью рука в рукав.";

/*функция, бьющая предложение по буквам и сохраняющая в массив*/
function mb_str_split( $string ) {
    return preg_split('/(?<!^)(?!$)/u', $string );
}

/*разбиваем текст по предложениям, сохраняем в массив*/
$sentences = explode("\r\n", $text);

/*бьём массив по буквам, на выходе массив леттерс*/
foreach($sentences as $key => &$value) {
    $letters[$key] = mb_str_split($value);
}

/*узнаём длину длиннейшего массива*/
$max = max(array_map('count', $letters));


/*заполняем остальные массивы пробелами, чтобы все стали равны*/
for($a=0; $a < count($letters); $a++){
    $counting = $max - count($letters[$a]);
    for($b=0; $b < $counting; $b++){
        array_push($letters[$a], " ");
    }
}

/*ебашу строку за строкой, думаю, тут всё понятно*/
$print = "";
for ($c = 0; $c < $max; $c++){
    for ($e = 0; $e < count($letters); $e++ ){
        $symbol = $letters[$e][$c] . " | ";
        $print = $print . $symbol;
    }
    $print .= "\n";
}
echo $print;