如何在php的控制台上进行对齐

2022-08-30 12:19:09

我正在尝试通过PHP中的命令提示符运行脚本,并尝试以表格形式显示结果。但是由于单词的字符长度不同,我无法正确显示结果对齐。

我想要这样的结果

Book                  ISBN      Department
Operating System      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 |
+----------+------+

推荐