Как сделать выравнивание на консоли в php

Я пытаюсь запустить скрипт через командную строку на 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();