2012-07-24 68 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 - 參數被視爲字符串並呈現。

相關問題