Я пытаюсь запустить скрипт через командную строку на PHP и попытаться показать результат в виде таблиц. Но из-за различной длины слов слов я не могу показать результат правильно выровненным.
Я хочу получить результат
Книга Операционная система ISBN 101 CS C 102 CS java 103 CS
Может кто-нибудь, пожалуйста, помогите мне получить этот вывод, как это в php на консоли.
заранее спасибо
Если вы не хотите (или не позволяете по какой-либо причине) использовать библиотеки, вы можете использовать стандартные printf
php printf
/ sprintf
.
Проблема с ними в том, что если у вас есть значения с переменной и неограниченной шириной, вам придется решить, будут ли укорочены длинные значения или разбить таблицу.
Первый случай:
// fixed width $mask = "|%5.5s |%-30.30s | x |\n"; printf($mask, 'Num', 'Title'); printf($mask, '1', 'A value that fits the cell'); printf($mask, '2', 'A too long value the end of which will be cut off');
Выход
| Num |Title | x | | 1 |A value that fits the cell | x | | 2 |A too long value the end of wh | x |
Второй случай:
// only min-width of cells is set $mask = "|%5s |%-30s | x |\n"; printf($mask, 'Num', 'Title'); printf($mask, '1', 'A value that fits the cell'); printf($mask, '2', 'A too long value that will brake the table');
И здесь мы получаем
| Num |Title | x | | 1 |A value that fits the cell | x | | 2 |A too long value that will brake the table | x |
Если ни одно из них не удовлетворяет вашим потребностям, и вам действительно нужна таблица с столбцами с плавающей шириной, вам нужно вычислить максимальную ширину значений в каждом столбце. Но именно так PEAR::Console_Table
работает.
Вы можете использовать PEAR :: Console_Table :
Console_Table позволяет отображать табличные данные на терминале / оболочке / консоли.
Пример:
require_once 'Console/Table.php'; $tbl = new Console_Table(); $tbl->setHeaders(array('Language', 'Year')); $tbl->addRow(array('PHP', 1994)); $tbl->addRow(array('C', 1970)); $tbl->addRow(array('C++', 1983)); echo $tbl->getTable();
Вывод:
+----------+------+ | Language | Year | +----------+------+ | PHP | 1994 | | C | 1970 | | C++ | 1983 | +----------+------+
Ваш лучший вариант – использовать Pear Package Console_Table ( http://pear.php.net/package/Console_Table/ ).
Для использования – на консоли вам нужно установить пакет груши, работающий:
pear install Console_Table
это должно загрузить пакет и установить. Затем вы можете использовать образец сценария, например:
require_once 'Console/Table.php'; $tbl = new Console_Table(); $tbl->setHeaders( array('Language', 'Year') ); $tbl->addRow(array('PHP', 1994)); $tbl->addRow(array('C', 1970)); $tbl->addRow(array('C++', 1983)); echo $tbl->getTable();
Вы можете попробовать недавнюю простую библиотеку PHP ConsoleTable, если вы не хотите использовать стандартные функции PHP printf / sprintf или пакет груши PEAR :: Console_Table .
Пример:
require_once 'ConsoleTable.php'; $table = new LucidFrame\Console\ConsoleTable(); $table ->addHeader('Language') ->addHeader('Year') ->addRow() ->addColumn('PHP') ->addColumn(1994) ->addRow() ->addColumn('C++') ->addColumn(1983) ->addRow() ->addColumn('C') ->addColumn(1970) ->display() ;
Вывод:
+----------+------+ | Language | Year | +----------+------+ | PHP | 1994 | | C++ | 1983 | | C | 1970 | +----------+------+
См. Другие примеры использования на странице github .
Слишком старый, но я пошел туда же и использовал str_pad, просто установите длину как размер вашей колонки, и это
С уважением.
Генератор таблицы CLIFramework помогает вам выполнить работу очень легко и поддерживает выравнивание текста, цвет текста, цвет фона, перенос текста, обработку переполнения текста и т. Д.
Вот учебник: https://github.com/c9s/CLIFramework/wiki/Using-Table-Component
Пример кода: https://github.com/c9s/CLIFramework/blob/master/example/table.php
use CLIFramework\Component\Table\Table; $table = new Table; $table->setHeaders([ 'Published Date', 'Title', 'Description' ]); $table->addRow(array( "September 16, 2014", "Title", "Description", 29.5 )); $table->addRow(array( "November 4, 2014", "Hooked: How to Build Habit-Forming Products", ["Why do some products capture widespread attention whil..."], 99, )); echo $table->render();