php 如何在php中的控制台上进行对齐
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7039010/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make alignment on console in php
提问by user519846
I am trying to run a script through command prompt in PHP and trying to show the result in tabular form. But due to different character length of words I am not able to show the result properly align.
我正在尝试通过 PHP 中的命令提示符运行脚本并尝试以表格形式显示结果。但是由于单词的字符长度不同,我无法正确对齐显示结果。
I want result like this
我想要这样的结果
Book ISBN Department
Operating System 101 CS
C 102 CS
java 103 CS
Can anyone please help me to get this output like this in php on console.
任何人都可以帮助我在控制台上的 php 中获得这样的输出。
Thanks in advance
提前致谢
回答by Hnatt
If you don't want (or not allowed for some reason) to use libraries, you can use standard php printf
/ sprintf
functions.
如果您不想(或由于某种原因不允许)使用库,您可以使用标准的 php printf
/sprintf
函数。
The problem with them that if you have values with variable and non-limited width, then you will have to decide if long values will be truncated or break table's layout.
他们的问题是,如果您的值具有可变和非限制宽度,那么您将必须决定是否截断长值或中断表的布局。
First case:
第一种情况:
// 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');
The output is
输出是
| Num |Title | x |
| 1 |A value that fits the cell | x |
| 2 |A too long value the end of wh | x |
Second case:
第二种情况:
// 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');
And here we get
在这里我们得到
| Num |Title | x |
| 1 |A value that fits the cell | x |
| 2 |A too long value that will brake the table | x |
If neither of that satisfies your needs and you really need a table with flowing width columns, than you have to calculate maximum width of values in each column. But that is how PEAR::Console_Table
exactly works.
如果这两者都不能满足您的需求,并且您确实需要一个具有流动宽度列的表格,那么您必须计算每列中值的最大宽度。但这PEAR::Console_Table
正是工作的方式。
回答by powtac
You can use PEAR::Console_Table:
您可以使用PEAR::Console_Table:
Console_Tablehelps you to display tabular data on a terminal/shell/console.
Console_Table帮助您在终端/外壳/控制台上显示表格数据。
Example:
例子:
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();
Output:
输出:
+----------+------+
| Language | Year |
+----------+------+
| PHP | 1994 |
| C | 1970 |
| C++ | 1983 |
+----------+------+
回答by dotbill
Your best option is to use the Pear Package Console_Table ( http://pear.php.net/package/Console_Table/).
您最好的选择是使用 Pear 包 Console_Table ( http://pear.php.net/package/Console_Table/)。
To use - on a console you need to install the pear package, running:
要使用 - 在控制台上,您需要安装梨包,运行:
pear install Console_Table
this should download the package and install. You can then use a sample script such as:
这应该下载包并安装。然后,您可以使用示例脚本,例如:
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();
回答by Sithu
You could try the recent simple PHP library ConsoleTableif you don't want to use the standard PHP functions printf/sprintfor the pear package PEAR::Console_Table.
如果您不想使用标准 PHP 函数printf/ sprintf或梨包PEAR::Console_Table ,您可以尝试最近的简单 PHP 库ConsoleTable。
Example:
例子:
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()
;
Output:
输出:
+----------+------+
| Language | Year |
+----------+------+
| PHP | 1994 |
| C++ | 1983 |
| C | 1970 |
+----------+------+
See more example usages at its github page.
在其 github 页面上查看更多示例用法。
回答by Erwin
Too old, but i went trough the same now and used str_pad, just set the lenght as the size of your column and thats it
太旧了,但我现在也使用了 str_pad,只需将长度设置为您的列的大小即可
regards.
问候。
回答by c9s
The CLIFramework table generator helps you get the job done very easily and it supports text alignment, text color, background color, text wrapping, text overflow handling.. etc
CLIFramework 表生成器可帮助您轻松完成工作,它支持文本对齐、文本颜色、背景颜色、文本换行、文本溢出处理等
Here is the tutorial: https://github.com/c9s/CLIFramework/wiki/Using-Table-Component
这是教程:https: //github.com/c9s/CLIFramework/wiki/Using-Table-Component
Sample code: https://github.com/c9s/CLIFramework/blob/master/example/table.php
示例代码: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();
回答by redestructa
Just in case someone wants to do that in PHP I posted a gist on Github
以防万一有人想在 PHP 中做到这一点,我在 Github 上发布了一个要点
https://gist.github.com/redestructa/2a7691e7f3ae69ec5161220c99e2d1b3
https://gist.github.com/redestructa/2a7691e7f3ae69ec5161220c99e2d1b3
simply call:
只需调用:
$output = $tablePrinter->printLinesIntoArray($items, ['title', 'chilProp2']);
you may need to adapt the code if you are using a php version older than 7.2
如果您使用的是低于 7.2 的 php 版本,则可能需要修改代码
after that call echo or writeLine depending on your environment.
之后根据您的环境调用 echo 或 writeLine 。