Подтвердить что ты не робот

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

Я пытаюсь запустить командную строку script через PHP и попытаться показать результат в виде таблицы. Но из-за различной длины слов я не могу показать результат правильно выровнен.

Я хочу получить результат, подобный этому

Книжный отдел ISBN Операционная система 101 CS C 102 CS java 103 CS

Может кто-нибудь, пожалуйста, помогите мне получить этот вывод, как это в php на консоли.

Заранее спасибо

4b9b3361

Ответ 1

Если вы не хотите (или не позволяете по какой-либо причине) использовать библиотеки, вы можете использовать стандартный 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.

Ответ 2

Вы можете использовать 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 |
+----------+------+

Ответ 3

Ваш лучший вариант - использовать Pear Package Console_Table (http://pear.php.net/package/Console_Table/).

Чтобы использовать - на консоли вам нужно установить пакет груши, работающий:

pear install Console_Table

это должно загрузить пакет и установить. Затем вы можете использовать образец script, например:

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();

Ответ 4

Вы можете попробовать недавнюю простую библиотеку 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.

Ответ 5

Генератор таблицы 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();

Ответ 6

Слишком старый, но я пошел через то же самое сейчас и использовал str_pad, просто установил длину как размер вашего столбца, и thats it

С уважением.