W PHP możemy formatować łańcuchy znaków na kilka sposobów. Najpopularniejszy, to używanie kropek, do łączenia ciągów i ewentualnie konkretnych funkcji do formatowania na przykład liczb zmiennoprzecinkowych. Ta metoda mnie nie do końca przekonuje, bo przy dłuższych ciągach jest średnio czytelna. Dlatego też, często korzystam z sprintf’a, poznanego jeszcze za czasów programowania w C.

Używając metody opisanej na wstępie, aby uzyskać taki ciąg:

Witaj wowo, masz 5 wiadomości, stan konta: 43.99 zł.

musimy wykonać coś w tym stylu:

$txt = ‚Witaj ‚ . $user . ‚ masz ‚ . $msgs .’ wiadomości, stan konta: ‚ . round($money,2);

sprintf’em natomiast poradzimy sobie w ten sposób:

$txt = sprintf(‚Witaj %s masz $d wiadomości, stan konta %.2f’, $user, $msgs, $money);

Jak dla mnie druga metoda jest przyjemniejsza. Ostatnio jednak natrafiłem na dziwny problem. Problem pojawia się, gdy chcemy w ciągu przetworzonym przez sprintfa mieć znak %, na przykład, w zapytaniu SQL:

$query = „SELECT name FROM users WHERE name like ‚%s%'”
$query = sprintf($query, $name);

zwróci:

SELECT name FROM users WHERE name like ‚wowo’

bo znak% na końcu, zostanie zinterpretowany jako znacznik formatu. Aby obejść ten problem trzeba użyć podwójnego procenta %%

$query = „SELECT name FROM users WHERE name like ‚%s%%'”

Więcej o spritnfie można znaleźć tam gdzie zawsze , czyli http://pl2.php.net/sprintf 🙂