Как сделать выравнивание на консоли в php
Я пытаюсь запустить командную строку script через PHP и попытаться показать результат в виде таблицы. Но из-за различной длины слов я не могу показать результат правильно выровнен.
Я хочу получить результат, подобный этому
Книжный отдел ISBN
Операционная система 101 CS
C 102 CS
java 103 CS
Может кто-нибудь, пожалуйста, помогите мне получить этот вывод, как это в php на консоли.
Заранее спасибо
Ответы
Ответ 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
С уважением.