166 PHP i MySQL dla każdego
166 PHP i MySQL dla każdego
Rysunek 6.6.
Wynik działania skryptu
wykorzystującego różne kody formatujące
Płk £dyc)a aidok Przejdź^ Zakładki Narzędzia Pomoc
tś - r~ http://localhost/index.php
Rozpocznll przygód... . Aktualnodd
Wartość 15, ciąg formatujący %’03d:
015
Wartość 15, ciąg formatujący %’_-3d:
15_
Wartość 10.454647, ciąg formatujący %.2£
10.45
Wartość 10.454647, ciąg formatujący %’06.2f:
010.455
pod $d zostanie wstawiona wartość zmiennej liczba, a pod Xs wartość zmiennej napis. Problem powstaje wówczas, gdy zamierzamy zmienić kolejność argumentów, ale nie chcemy zmieniać kodu. Do takiej sytuacji może dojść wtedy, gdy np. ciąg formatujący jest zapisywany w oddzielnym pliku. Zmianę kolejności uzyskujemy dzięki zastosowaniu konstrukcji:
£numer/Skod
Jeśli np. interesuje nas wartość drugiego argumentu, która ma zostać przedstawiona jako wartość dziesiętna, trzeba zastosować ciąg:
*2/Sd
Na listingu 6.8 widoczny jest kod ilustrujący opisywany problem. Efekt działania kodu został natomiast przedstawiony na rysunku 6.7.
Listing 6.8. Zmiana kolejności argumentów w ciągach formatujących <?php
Sformatl = "Liczba ma wartość %d. napis ma wartość *s":
$format2 = “Napis ma wartość Xs. liczba ma wartość £d":
Sformat3 - "Napis ma wartość *2\Ss. liczba ma wartość *l\Sd":
$1iczba = 100;
printf(Sformatl. |
$1iczba. |
Snapis): | |
echo("<br>"): | |||
printf($format2. |
$1 |
czba. |
Snapis): |
echo("<br>"): | |||
printf($format3. |
$1 |
czba. |
Snapis): |
Snapis = "abcd":
Ciągi formatujące zostały zapisane w zmiennych formatl, format2 i format3. W ciągu format 1 pierwszym parametrem jest wartość całkowita, a drugim parametrem łańcuch znaków. W ciągu format2 jest odwrotnie, kolejność została zamieniona (np. ze względów stylistycznych). Oznacza to, że każdy z tych przypadków wymaga innej kolejności argumentów w instrukcji printf. Jeśli kolejność argumentów nie zostanie zmieniona, tak jak na listingu, otrzymamy nieprawidłowe wyniki. Jeśli nie chcemy lub nie możemy