2017-07-02 5 views
3
私は次のコードを理解することができません

は適切にPHPでまた、vprintf()を理解することができません

<?php 
    $number = 123; 
    vprintf("With 2 decimals: %1\$.2f 
    <br>With no decimals: %1\$u",array($number)); 
?> 

ブラウザは、出力:

With 2 decimals: 123.00 
With no decimals: 123 

しかし、ここではそれに対し、配列の唯一の要素があります2つの議論でなければならない。

また、あなたが使用したいパラメータを指定する方法です%1\$

答えて

8

の意味は何ですか。 %1$sあなたが関数呼び出しで同じ値を複数回供給する必要はありませんので、それは再使用して、単一のパラメータの方法だなど最初のパラメータ、%2$s秒を示しています。あなたのコードで

$one = 'one'; 
$two = 'two'; 

printf('%s', $one); // 'one' 
printf('%1$s', $one); // 'one' 
printf('%s %s', $one, $two); // 'one two' 
printf('%1$s %2$s', $one, $two); // 'one two' 
printf('%2$s %1$s', $one, $two); // 'two one' 

printf('%1$s %2$s %1$s', $one, $two); // 'one two one' 

形式が二重引用符で囲まれているため、ドル記号がエスケープされていない場合は変数$.2fまたは$u(存在しない)を解析しようとするため、\でエスケープされます。

+0

printfで二重引用符を使用することは無意味で、このような問題につながります。なぜなら、文字列から変数を移動するために使用されるのはその理由です。 – chx

+0

これは一般的な開発者の好みです。特に、文字列の場合は二重引用符、文字の場合は一重引用符で囲んだ強く型付けされた言語に由来する開発者の間でです。 – rickdenhaan

関連する問題