推荐使用 laravel 内置的 $this->table() 方法输出格式化表格,它自动对齐、适配终端宽度、支持中文;也可用 symfony table 类自定义列宽与样式,或用 sprintf 实现无边框纯文本对齐。

在 Laravel 命令行(Artisan 命令)中输出格式化表格,推荐使用 Laravel 内置的 $this->table() 方法,它基于 Symfony Console 组件,简洁、自动对齐、适配终端宽度。
使用 $this->table() 快速输出表格
这是最常用、最推荐的方式。你只需提供表头和数据二维数组,Laravel 自动渲染带边框和对齐的表格:
- 表头是字符串数组(列名),数据是数组的数组(每行一个子数组)
- 列数必须与表头一致,否则会报错或显示异常
- 支持中文,自动按字符宽度对齐(Laravel 9+ 对宽字符处理更稳定)
示例:
// 在自定义 Artisan 命令的 handle() 方法中
$headers = ['ID', '姓名', '邮箱', '状态'];
$data = [
[1, '张三', 'zhang@example.com', '启用'],
[2, '李四', 'li@example.com', '禁用'],
];
$this->table($headers, $data);
手动控制列宽或添加样式(可选进阶)
若需自定义列宽、颜色或对齐方式,可配合 Symfony 的 Table 类(Laravel 底层已集成):
- 用
new Table($this->output)实例化,再调用setHeaders()和setRows() - 支持
setColumnWidths([10, 20, 30])强制设定各列最小宽度 - 可用
setStyle('box')或'compact'切换边框风格
示例(精简写法):
use Symfony\Component\Console\Helper\Table;
$table = new Table($this->output);
$table->setHeaders(['ID', '名称', '操作'])
->setRows([[1, '用户管理', '编辑'], [2, '日志查看', '导出']])
->setColumnWidths([5, 15, 10])
->render();
输出纯文本表格(无边框,适合日志或简单展示)
如果只是需要对齐、不想要边框,可用 $this->line() 拼接 + sprintf 格式化:
- 适合固定字段、结构简单的场景
- 用
%-10s表示左对齐占10字符,%-15s占15字符,依此类推 - 注意中文字符宽度问题,建议统一用等宽字体环境测试
示例:
$this->line(sprintf('%-5s %-12s %-20s', 'ID', '姓名', '邮箱'));
$this->line(sprintf('%-5s %-12s %-20s', '1', '张三', 'zhang@example.com'));
注意事项和常见问题
- 表格内容含换行符(
\n)会导致错位,输出前建议用str_replace("\n", " ", $value)清理 - 数据为空数组时
$this->table()会输出空表,如需提示,先判断:if ($data) { $this->table(...) } else { $this->info('暂无数据'); } - 在 CI/CD 环境或非交互终端中,部分表格样式可能退化为纯文本对齐,属正常行为











