"Настоящие" таблицы в псевдографике Юникода
В этой вот заметке я с помощью PHP просто выравнивал текст по столбцам, плюс предполагая, что работа выполняется с однобайтовыми символами.
Сегодня мне понадобились рамки как в старой доброй псевдографике DOS, только для кодировки Юникода UTF-8. По ссылке уже есть таблица с нужными символами (или вот эта рамочница в английской Вики).
Класс Tabber
очень прост в обращении - достаточно передать конструктору двумерный массив с данными и номер рамки (от 0 до 4, по умолчанию 1). Потом вызываем метод get()
, который вернёт всю таблицу, отформатированную и заключённую в тег <pre>
(если шрифт не моноширинный, разумеется, всё "разъедется"):
$data = [ [ -1, 2, 3, 4 ], [ 5, 6, 7 ], [], [9,10] ]; $tab = new Tabber ($data,1); echo $tab->get();
Выравнивание столбцов определяется по первой строке данных, если из начала записи удалось извлечь число, выравнивание будет направо (пробелы слева), в том числе, для дат или денежных сумм, если числа нет, пробелы будут дописываться справа, то есть строка останется выровненной по левому краю, всё как в Excel.
Ширина столбцов определяется автоматически исходя из данных. Строки с разным количеством столбцов также не должны смущать класс.
Пришлось также написать собственную функцию str_pad, работающую с символами Юникода, стандартная делать это отказалась.
Функция называется str_pad_unicode
, другими данными класса она не пользуется, поэтому легко "достаётся" из его листинга.
Поскольку мне не хочется "портить" символы рамок, в ленте исходник не прикрепляю, но его можно скачать по ссылке:
Класс Tabber и пример использования, папка с проектом PHP уже создана внутри архива .zip (2 Кб)
Помните, что файл нужно открывать в кодировке Юникода utf-8, и не в Блокноте, как любые листинги PHP. Также можно выполнить пример в работе. Версия PHP нужна не ниже 5.4, я проверял в 5.5.9 из Denwer.
В "Андроиде", похоже, криво - возможно, там размер пробела в моноширинном тексте из тега <pre>
не равен ширине символа.
09.11.2019, 13:41 [1783 просмотра]