2017-07-02 14 views
3

ich nicht imstande bin, den folgenden Code zu verstehen:kann nicht vprintf() in PHP richtig verstehen

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

Browser Ausgabe:

With 2 decimals: 123.00 
With no decimals: 123 

Aber hier gibt es nur ein Element in der Anordnung, während es muss zwei Argumente sein.

Auch was ist die Bedeutung von %1\$

Antwort

8

Das ist ein Weg, um festzulegen, welche Parameter Sie verwenden möchten. %1$s zeigt den ersten Parameter, %2$s die zweite, usw. Es ist ein Weg der Wiederverwendung eines einzelnen Parameters, so dass Sie mehrere Male im Funktionsaufruf nicht den gleichen Wert haben zu liefern:

$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' 

In Ihrem Code Es ist mit einem \ entkommen, weil Ihr Format in Anführungszeichen ist, die versuchen würden, eine Variable $.2f oder $u (die nicht existieren) zu analysieren, wenn das Dollarzeichen nicht escaped ist.

+0

Die Verwendung von Anführungszeichen in printf ist sinnlos und führt zu Problemen wie dieser, der Grund, warum es verwendet wird, um die Variablen aus der Zeichenfolge zu entfernen. – chx

+0

Es ist jedoch eine gängige Entwicklereinstellung, insbesondere bei Entwicklern, die aus stark typisierten Sprachen kommen, in denen doppelte Anführungszeichen für Zeichenfolgen und einfache Anführungszeichen für Zeichen stehen. – rickdenhaan