<?php
error_reporting(-1);
mb_internal_encoding('utf-8');
$text = <<<EOF
Дым табачный воздух выел.
Комната —
глава в крученыховском аде.
Вспомни —
за этим окном
впервые
руки твои, исступлённый, гладил.
Сегодня сидишь вот,
сердце в железе.
День ещё —
выгонишь,
может быть, изругав.
В мутной передней долго не влезет
сломанная дрожью рука в рукав.
EOF;

$parts = preg_split("/[\n]/u", $text);

$chars = array();
foreach ($parts as $key => $char) {
	$chars[$key] = preg_split("//u", $char, -1, PREG_SPLIT_NO_EMPTY);
}
	
$length = count($chars);
var_dump(count($chars[0]) - 1);

// если выставить $j <= 40; то отработаеются полностью все строки
for ($j = 0; $j <= count($chars[$j]) - 1; $j++) {
    for ($i = 0; $i <= $length - 1; $i++) {
    	if (isset($chars[$i][$j])) {
			echo " {$chars[$i][$j]} |";
		} else {
			echo "   |";
		}
    }
    echo "\n";
}