PHP sprintf() 函数

PHP String 函数

定义和用法

sprintf() 函数把格式化的字符串写写入一个变量中。

语法

string sprintf ( string $format [, mixed $args [, mixed $... ]] )
参数 描述
format 必需。转换格式。
args 可选。规定插到 format 字符串中 % 符号处的参数。

说明
 

参数format 字符串是由零个或多个指令组成: 普通字符 (除了%) 将直接复制到结果,  转换指示符, 每一种结果取其自己的参数. 这适用于 sprintf()和printf().

参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

1.一个可选的符号指示符强制一个符号(- or +)用在一个数字上. 默认情况下, 只有 - 符号用在一个数字上如果它是负值 。 这个指示符同样强制正数附加一个+符号。

2.一个可选的 填充指示符 是说什么字符将用于填充结果到正确的字符串长度. 这可能是一个空白字符或者一个0(zero character).  默认填充空白. 能指定一个替换填充字符 通过加一个单引号前缀(')。

3.一个可选的 对齐指示符 是说 结果应该是左对齐或右对齐. 默认是右对齐; 一个 - 字符在这里将使它左对齐。

4.一个可选的数字, 一个宽度指示符 是说这种转换应该导致有多少字符(最少)。

5.一个可选的 精度指示符 在形式上是一个句点 (‘.’) 紧随其后的是一个可选的十进制数字字符串,就是说有多少十进制数字应该被显示为浮点数。 当用这个指示符在一个字符串 它作为一个中断点, 设置一个最大字符限制给字符串.

6.一个类型指示符 是说 参数数据应当被当作什么类型. 可能的类型:

  • % - 返回百分比符号
  • b - 二进制数
  • c - 依照 ASCII 值的字符
  • d - 带符号十进制数
  • e - 科学计数法(比如 1.5e+3)
  • E - 科学计数法(比如 1.2E+2). (大写字母)
  • u - 无符号十进制数
  • f - 浮点数(local settings aware)
  • F - 浮点数(not local settings aware)
  • g - shorter of %e and %f.
  • G - shorter of %E and %f.
  • o - 八进制数
  • s - 字符串
  • x - 十六进制数(小写字母)
  • X - 十六进制数(大写字母)

arg1, arg2, agr++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。

提示和注释

注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符插到 % 符号后面,由数字和 "\$" 组成。请参见例子 3。

 format字符串支持参数编号/交换. 这里有一个例子:

Example #1 参数交换

<?php
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
printf($format, $num, $location);
?>

这将会输出 "There are 5 monkeys in the tree". 但想象 我们正在创建一个格式化字符串 在一个单独的文件里, 通常因为我们想国际化它,我们重写它作为:

Example #2 参数交换

<?php
$format = 'The %s contains %d monkeys';
printf($format, $num, $location);
?>

我们现在有一个问题. 格式化字符串中的点位符顺序 不匹配 代码中的参数顺序. 我们想要照原来的样子留下代码并 仅仅表明在格式化字符串中占位符指的是哪个参数. 我们将代替 写格式化字符串像这样:

Example #3 参数交换

<?php
$format = 'The %2$s contains %1$d monkeys';
printf($format, $num, $location);
?>

一个额外的好处是,您可以在代码里不增加更多的参数地重复占位符. 例如:

Example #4 参数交换

<?php
$format = 'The %2$s contains %1$d monkeys.
           That\'s a nice %2$s full of %1$d monkeys.';
printf($format, $num, $location);
?>

当使用参数交换时,  n$ 位置指示符必须紧接着百分号 (%), 在任何其它指示符之前, 下面示例中所示:

Example #5 Position specifier with other specifiers

<?php
$format= 'The %2$s contains %1$04d monkeys';
printf($format, $num, $location);
?>
上面的例子将输出:
The tree contains 0005 monkeys

 

 

提示: 相关函数: fprintf()、 printf()、 vfprintf()、 vprintf() 以及 vsprintf()。

例子

例子 1

<?php
$str = "Hello";
$number = 123;
$txt = sprintf("%s world. Day number %u",$str,$number);
echo $txt;
?>

输出:

Hello world. Day number 123

例子 2

<?php
$number = 123;
$txt = sprintf("%f",$number);
echo $txt;
?>

输出:

123.000000

例子 3

<?php
$number = 123;
$txt = sprintf("With 2 decimals: %1$.2f<br />With no decimals: %1$u",$number);
echo $txt;
?>

输出:

With 2 decimals: 123.00 
With no decimals: 123

Examples

Example #6 printf(): 各种例子

<?php
$n =  43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'

// notice the double %%, this prints a literal '%' character
printf("%%b = '%b'\n", $n); // binary representation
printf("%%c = '%c'\n", $c); // print the ascii character, same as chr() function
printf("%%d = '%d'\n", $n); // standard integer representation
printf("%%e = '%e'\n", $n); // scientific notation
printf("%%u = '%u'\n", $n); // unsigned integer representation of a positive integer
printf("%%u = '%u'\n", $u); // unsigned integer representation of a negative integer
printf("%%f = '%f'\n", $n); // floating point representation
printf("%%o = '%o'\n", $n); // octal representation
printf("%%s = '%s'\n", $n); // string representation
printf("%%x = '%x'\n", $n); // hexadecimal representation (lower-case)
printf("%%X = '%X'\n", $n); // hexadecimal representation (upper-case)

printf("%%+d = '%+d'\n", $n); // sign specifier on a positive integer
printf("%%+d = '%+d'\n", $u); // sign specifier on a negative integer
?>

The above example will output:
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
Example #7 printf(): 字符串指示符

<?php
$s = 'monkey';
$t = 'many monkeys';

printf("[%s]\n",      $s); // standard string output
printf("[%10s]\n",    $s); // right-justification with spaces
printf("[%-10s]\n",   $s); // left-justification with spaces
printf("[%010s]\n",   $s); // zero-padding works on strings too
printf("[%'#10s]\n",  $s); // use the custom padding character '#'
printf("[%10.10s]\n", $t); // left-justification but with a cutoff of 10 characters
?>

The above example will output:
[monkey]
[    monkey]
[monkey    ]
[0000monkey]
[####monkey]
[many monke]
Example #8 sprintf(): 零填充整数

<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Example #9 sprintf(): 格式化货币

<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted will output "123.10"
?>
Example #10 sprintf(): 科学计数法

<?php
$number = 362525200;

echo sprintf("%.3e", $number); // outputs 3.625e+8
?>

 

PHP sprintf() 函数用法
标签: