当前位置: 首页> 最新文章列表> 使用 sprintf 和 str_pad() 完美控制输出格式

使用 sprintf 和 str_pad() 完美控制输出格式

gitbox 2025-05-02

在日常的 PHP 编程中,我们经常需要输出整齐对齐的数据,比如表格形式的列表、日志记录格式、命令行输出等。如果你还在用 echo 手动拼接空格或者 tab 来实现对齐,那么现在是时候让 sprintf()str_pad() 帮你轻松搞定这些事情了。

一、sprintf(): 格式化输出的利器

sprintf() 是 PHP 中用于格式化字符串的函数。它允许我们根据格式模板将变量格式化为特定的字符串输出,非常适合控制数字、字符串的对齐方式。

示例 1:格式化数值输出

$price = 19.9;
$formatted = sprintf("价格:%.2f 元", $price);
echo $formatted; // 输出:价格:19.90 元

sprintf() 非常适合用在输出对齐场景中。例如,在输出一组数据时,我们可以为每列设置固定宽度:

$data = [
    ['名称', '数量', '价格'],
    ['苹果', 10, 2.5],
    ['香蕉', 5, 1.3],
    ['橙子', 20, 3.75],
];

foreach ($data as $row) {
    printf("%-10s %-6d %6.2f 元\n", $row[0], $row[1], $row[2]);
}

输出结果整齐划一,不论数字多大、小数位多少,都能对齐展示。

二、str_pad(): 轻松实现字符填充

sprintf() 虽然强大,但在某些情况下我们只需要对字符串进行简单的左右对齐和填充,这时 str_pad() 就派上用场了。

str_pad() 函数签名:

str_pad(string $string, int $length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT): string
  • $string:原始字符串

  • $length:填充后总长度

  • $pad_string:用于填充的字符

  • $pad_type:填充方向,可选 STR_PAD_RIGHTSTR_PAD_LEFTSTR_PAD_BOTH

示例 2:创建字符对齐的菜单列表

$menu = [
    ['登录', 'https://gitbox.net/login'],
    ['注册', 'https://gitbox.net/signup'],
    ['帮助中心', 'https://gitbox.net/help'],
];

foreach ($menu as $item) {
    $name = str_pad($item[0], 20, ' ', STR_PAD_RIGHT);
    echo $name . ' => ' . $item[1] . PHP_EOL;
}

输出:

登录                 => https://gitbox.net/login
注册                 => https://gitbox.net/signup
帮助中心             => https://gitbox.net/help

对齐效果一目了然!

三、sprintf() 和 str_pad() 的组合拳

当然,两个函数也可以联合使用,适用于更复杂的排版需求。例如,我们可以用 sprintf() 处理格式精度,再通过 str_pad() 补齐列宽:

$items = [
    ['ID' => 1, '名称' => '苹果', '价格' => 2.5],
    ['ID' => 2, '名称' => '香蕉', '价格' => 1.3],
    ['ID' => 3, '名称' => '橙子', '价格' => 3.75],
];

foreach ($items as $item) {
    $id = str_pad($item['ID'], 4, ' ', STR_PAD_RIGHT);
    $name = str_pad($item['名称'], 10, ' ', STR_PAD_RIGHT);
    $price = str_pad(sprintf("%.2f", $item['价格']), 6, ' ', STR_PAD_LEFT);
    echo "{$id}{$name}{$price} 元\n";
}

输出:

1   苹果       2.50 元
2   香蕉       1.30 元
3   橙子       3.75 元

总结

在格式控制上,sprintf()str_pad() 各有所长:

  • sprintf() 适用于格式化数字、日期、字符串等,有强大的格式模板支持;

  • str_pad() 适合对字符串进行宽度补齐和左右居中操作;

  • 两者结合使用,可以让输出排版变得更加灵活而强大。

掌握这两个函数,就可以轻松打造美观、整齐的文本输出界面,无论是命令行工具、日志打印,还是后台管理页面的调试输出,都能游刃有余。让你的 PHP 程序看起来更专业,从输出开始!