在php中如何在控制台上进行对齐
我试图在PHP中通过命令提示符运行一个脚本,并试图以表格形式显示结果。但是由于单词的字符长度不同,我无法正确对齐显示结果 我想要这样的结果在php中如何在控制台上进行对齐,php,command-line,console,alignment,Php,Command Line,Console,Alignment,我试图在PHP中通过命令提示符运行一个脚本,并试图以表格形式显示结果。但是由于单词的字符长度不同,我无法正确对齐显示结果 我想要这样的结果 Book ISBN Department Operating System 101 CS C 102 CS java 103 CS 任何人都可以帮助我在php控制台上获得这样的输出 提前感谢如果
Book ISBN Department
Operating System 101 CS
C 102 CS
java 103 CS
任何人都可以帮助我在php控制台上获得这样的输出
提前感谢如果您不想(或由于某种原因不允许)使用库,您可以使用标准的php/函数
他们的问题是,如果您的值是可变的且宽度不受限制的,那么您必须决定是截断长值还是打断表的布局
第一种情况:
// 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\u表的工作原理。您可以使用:
帮助您在屏幕上显示表格数据
终端/外壳/控制台
示例:
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 |
+----------+------+
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 |
+----------+------+
输出:
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 |
+----------+------+
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 |
+----------+------+
您最好的选择是使用Pear包控制台表() 要使用-在控制台上,您需要安装pear软件包,运行:
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();
CLIFramework表格生成器帮助您轻松完成工作,它支持文本对齐、文本颜色、背景色、文本换行和文本溢出处理。。等 以下是教程: 示例代码:
如果不想使用标准PHP函数/或pear包,可以尝试最近的简单PHP库 示例:
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 |
+----------+------+
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 |
+----------+------+
输出:
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 |
+----------+------+
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 |
+----------+------+
查看更多示例用法。太旧了,但我现在也使用了str_pad,只需将长度设置为列的大小即可
问候。我在Github上发布了一个要点,以防有人想用PHP实现这一点 简单地说:
$output = $tablePrinter->printLinesIntoArray($items, ['title', 'chilProp2']);
如果使用的是早于7.2的php版本,则可能需要修改代码
之后,根据您的环境,呼叫echo或writeLine。powtac-您在几秒钟内用相同的解决方案击败了我!非常感谢鲍勃的快速回复。我会照这个做,为什么?表中的值太长?然后首先需要在每列中找到最长的字符串。这看起来真的像是重新发明了一个轮子,因为powtac建议的PEAR解决方案为您实现了这一点。所以我放弃了我的答案,支持他的回答。+1-如果你不想选择库,
sprintf
是格式化输出的良好开端,请检查不同的可用格式:-你可以对表的标题行和数据行使用相同的掩码。谢谢@hakre。在您的评论之后,我认为我的答案没有那么糟糕,基于sprintf的解决方案值得进一步解释,因此我更新了我的答案。与其他答案不同,使用stru_pad可以在您拥有所有行内容之前回显内容,因此在这种情况下,这是一个更好的选择。