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 :-)