Menu

sprintf() w PHP: formatowanie, zera i miejsca po przecinku

sprintf() buduje string z formatu i wartości: sprintf('%05.2f', 3.14159) zwraca "03.14". Poznaj %s, %d i %f, dopełnianie zerami, stałą liczbę miejsc po przecinku, wyrównanie, numerowanie argumentów, printf i vsprintf.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

sprintf() zwraca string zbudowany z formatu i listy wartości: każde miejsce % w formacie zostaje zastąpione kolejną wartością. sprintf('%s is %d years old', 'Ada', 36) zwraca "Ada is 36 years old". printf() przyjmuje te same argumenty, ale wypisuje wynik zamiast go zwracać.

Miejsca są wypełniane po kolei, od lewej do prawej. %.2f zawsze pokazuje dwa miejsca po przecinku (4.50, a nie 4.5), a %05d dopełnia liczbę zerami do pięciu cyfr.

Specyfikatory formatu

Miejsce to %, opcjonalne modyfikatory, a potem jedna litera oznaczająca typ:

SpecyfikatorZnaczeniesprintf(...)Wynik
%sstringsprintf('%s', 'PHP')PHP
%dliczba całkowita (ze znakiem)sprintf('%d', 42.9)42
%fliczba zmiennoprzecinkowa, domyślnie 6 miejscsprintf('%f', 1.5)1.500000
%.2fliczba zmiennoprzecinkowa, 2 miejscasprintf('%.2f', 1.5)1.50
%enotacja naukowasprintf('%e', 1234.5678)1.234568e+3
%x / %Xszesnastkowosprintf('%x', 255)ff
%oósemkowosprintf('%o', 8)10
%bdwójkowosprintf('%b', 5)101
%cznak z kodusprintf('%c', 65)A
%uliczba całkowita bez znakusprintf('%u', 3)3
%%dosłowny znak procentusprintf('%d%%', 50)50%

Zmień wartości poniżej i uruchom ponownie:

%d obcina liczbę zmiennoprzecinkową w stronę zera, więc 42.9 staje się 42. Jeśli chcesz 43, najpierw zaokrąglij: sprintf('%d', round(42.9)). String, który nie jest liczbą, na przykład 'abc', przy %d staje się 0.

Dopełnianie zerami wiodącymi

Między % a literą możesz umieścić znak dopełnienia i szerokość. %05d oznacza „dopełnij znakiem 0 do szerokości 5”. To zwykły sposób formatowania numerów zamówień, identyfikatorów faktur, godzin i dat.

Szerokość jest minimum. Liczba dłuższa niż szerokość zostaje wypisana w całości.

%05.2f: szerokość i miejsca po przecinku razem

Przy liczbach zmiennoprzecinkowych szerokość liczy każdy znak wyniku, w tym kropkę dziesiętną i znak minus. Dlatego %05.2f dla 3.14159 daje 03.14: łącznie pięć znaków, z czego dwa po kropce.

%f używa separatora dziesiętnego z bieżącego locale (ustawianego przez setlocale()), a %F zawsze używa kropki. Jeśli twój kod ustawia locale (na przykład polskie, z przecinkiem), a potrzebujesz kropki dla JSON, CSV lub API, użyj %F.

Wyrównanie tekstu w kolumnach

Dodatnia szerokość wyrównuje do prawej, - przed szerokością wyrównuje do lewej, a ' z następującym po nim znakiem ustawia własny znak dopełnienia. Razem pozwalają ułożyć raporty tekstowe i paragony.

%-14s dopełnia nazwę pozycji z prawej do 14 znaków, %8.2f wyrównuje cenę do prawej w 8 znakach, a %'-27s z pustym stringiem wypisuje linię 27 myślników. %'*10s dopełnia znakiem * zamiast spacji.

Numerowanie argumentów do ponownego użycia lub zmiany kolejności

%1$s oznacza „pierwszy argument jako string”, a %2$d „drugi jako liczba całkowita”. Numerowane miejsca pozwalają użyć wartości dwa razy albo zmienić kolejność bez zmiany listy argumentów, czego potrzebują tłumacze, gdy szyk zdania różni się między językami.

vsprintf, printf i wartości zwracane

vsprintf() przyjmuje wartości jako jedną tablicę, co przydaje się, gdy już są w tablicy. printf() zwraca liczbę wypisanych bajtów, a vprintf() to tablicowa wersja printf().

Liczba z printf() obejmuje znak nowej linii, więc "Hello\n" to 6 bajtów. Dla tekstu wielobajtowego liczy bajty, a nie znaki.

Za mało argumentów rzuca błąd

Od PHP 8 format z większą liczbą miejsc niż wartości rzuca ArgumentCountError zamiast zwracać false. Gdy zobaczysz ten błąd, policz miejsca % (pomijając %%).

Komunikat liczy string formatu jako argument: ArgumentCountError: 4 arguments are required, 3 given. Nadmiarowe argumenty są po cichu ignorowane, więc odwrotny błąd nie pojawia się jako błąd. Jeśli wynik sprintf wygląda źle, wypisz format obok wartości. Gdy potrzebujesz tylko separatora tysięcy, number_format() jest prostsze niż budowanie go przez sprintf. Pełną listę modyfikatorów znajdziesz na php.net.

Najczęściej zadawane pytania

Jak dodać zera wiodące do liczby w PHP?

Użyj sprintf('%05d', 42), które zwraca "00042". 0 to znak dopełnienia, a 5 to całkowita szerokość. Dla stringa str_pad('42', 5, '0', STR_PAD_LEFT) daje ten sam wynik.

Jak sformatować liczbę do 2 miejsc po przecinku przez sprintf?

Użyj %.2f: sprintf('%.2f', 3.14159) zwraca "3.14", a sprintf('%.2f', 5) zwraca "5.00". Dodaj szerokość, aby też dopełnić: %08.2f daje "00003.14".

Czym różni się printf od sprintf w PHP?

sprintf() zwraca sformatowany string, który możesz zapisać. printf() od razu go wypisuje i zwraca liczbę wypisanych bajtów. echo sprintf(...) i printf(...) dają ten sam wynik na wyjściu.

Co oznacza %s w PHP?

%s to miejsce na string w sprintf() i printf(): sprintf('Hello, %s', 'Ada') zwraca "Hello, Ada". Liczby przekazane do %s są zamieniane na stringi. %d służy do liczb całkowitych, a %f do zmiennoprzecinkowych.

Jak użyć tego samego argumentu dwa razy w sprintf?

Ponumeruj miejsca: sprintf('%1$s loves %2$s, and %2$s loves %1$s', 'Ada', 'PHP'). Format otocz pojedynczymi cudzysłowami: w podwójnych PHP czyta $s jako zmienną, więc "%1$s" staje się %1 i wartością $s.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ