2017-11-07 3 views
0
<?php 

$letters = range(A,Z); 

$format_string = '<li><a href="#%s">%s</a></li>'; 

foreach ($letters as $key => $letter) { 
    echo printf($format_string,$letter, $letter); 
} 

?> 

Dies sollte von AW ein li mit dem Alphabet drucken, aber die Ausgabe wie folgt aussieht:Warum gibt dieses printf 27 wiederholt aus?

  • A

  • B

etc .. den ganzen Weg bis zur letzten Nummer.

Die Verwendung eines regulären Echos mit String-Verkettung gibt die Liste ohne 27 aus.

+1

check quotes => Bereich ('A', 'Z'); –

+0

Was gibt 'printf' nach den Dokumenten zurück? Warum drucken Sie es? – Mat

+0

Sie suchen nach [sprintf] (https://getcomposer.org/) nicht printf. – Andrew

Antwort

1

Sie echo mit dem Rückgabewert des Aufrufs printf Aufruf, die in the manual als

Gibt die Länge des ausgegebenen Zeichenfolge definiert ist.

So wird Ihr printf Anruf ausgeführt und Ihre Zeichenfolge angezeigt. Dies ist , die die Länge der Zeichenfolge <li><a href="#%s">%s</a></li> ist, sobald ein einzelner Buchstabe eingefügt wurde. Der Aufruf an echo wird dann angezeigt, nachdem der String selbst angezeigt wurde.

Kurz gesagt, entfernen Sie entweder echo oder wie in einem Kommentar erwähnt, verwenden Sie stattdessen sprintf, die die Zeichenfolge zurückgibt, anstatt es anzuzeigen.

Verwandte Themen