2012-07-24 57 views

回答

37

以%符号开头的printf或sprintf字符是占位符(或标记)。它们将被作为参数传递的变量替换。

例子:

$str1 = 'best'; 
$str2 = 'world'; 

$say = sprintf('Tivie is the %s in the %s!', $str1, $str2); 
echo $say; 

这将输出:

Tivie是世界上最好的!

注:有更多的占位符(%s于字符串,十二月号,等等%d ...)


订单:

在其中传递的顺序参数很重要。如果切换$ STR1与STR2 $作为

$say = sprintf('Tivie is the %s in the %s!', $str2, $str1); 

将打印

“Tivie是世界上最好的!”

你可以,但是,更改参数的阅读顺序是这样的:

$say = sprintf('Tivie is the %2$s in the %1$s!', $str2, $str1); 

这将正确打印的句子。


另外,请记住,PHP是一种动态语言,不需要(或支持)明确的类型定义。这意味着它根据需要处理变量类型。在sprint中,它意味着如果你传递一个“字符串”作为数字占位符(%d)的参数,那么该字符串将被转换为数字(int,float ...),这可能会产生奇怪的结果。这里有一个例子:

$onevar = 2; 
$anothervar = 'pocket'; 
$say = sprintf('I have %d chocolate(s) in my %d.', $onevar, $anothervar); 
echo $say; 

这将打印

我在0

更多阅读2巧克力(S)在PHPdocs

+0

我认为你的例子与奈德的解释一起作出一个相当可靠的答案。问题:如果我写'sprintf('Tivie是%s!中的%s!',$ str2,$ str2);',它会回应吗?'Tivie是最好的世界! – 2012-07-24 03:12:24

+1

自从str2 = world以后,它会输出“Tivie是世界的世界”, – Tivie 2012-07-27 09:42:39

+0

Hooray是错字的。我笑了起来。所以'%strn'返回'%s [n]'的值,可以这么说吗?用同样的符号,'%s%s'返回'%s [0]%s [1]'的值? – 2012-07-28 05:27:51

9

printf%s是为将要插入到字符串数据的占位符。 printf的额外参数是要插入的值。他们在位置上与占位符关联:第一个占位符获取第一个值,第二个占位符获取第二个值,依此类推。

+1

'+ 1' - 顺便说一句,正确的术语是字符串插值。 – 2012-07-24 02:27:29

+0

显然,与C的'printf'语法相同。 – 2012-07-24 02:30:46

1
$num = 5; 
$location = 'tree'; 

$format = 'There are %d monkeys in the %s'; 
echo sprintf($format, $num, $location); 

将输出:“树中有5只猴子。”

+1

感谢您的编辑,Ned。我进行了四次编辑,但仍然无法正常工作。 Markdown一定已经搞砸了一秒钟。 – David 2012-07-24 02:28:01

+0

这是一个非常好的答案,值得更多的关注。 – 2014-06-23 23:46:36

+0

直接从PHP手册:) – 2016-07-20 12:17:07

3

%s是一个类型说明符,在%s的情况下将被替换为有价值的值(字符串)。

此外%s您可以使用其他specifiers,最流行的是如下:

d - 参数被视为一个整数,并作为一个(签字)十进制数。

f - 将参数视为浮点数,并将其表示为浮点数(区域设置为 )。

s - 参数被视为字符串并呈现。

相关问题