sprintf() bir biçimden ve bir değer listesinden oluşturulmuş bir dizge döndürür: biçimdeki her % yer tutucusu sıradaki değerle değiştirilir. sprintf('%s is %d years old', 'Ada', 36) "Ada is 36 years old" döndürür. printf() aynı argümanları alır ama sonucu döndürmek yerine yazdırır.
Yer tutucular soldan sağa sırayla doldurulur. %.2f her zaman iki ondalık gösterir (4.5 değil 4.50) ve %05d sayıyı sıfırlarla beş basamağa tamamlar.
Biçim belirteçleri
Bir yer tutucu %, isteğe bağlı değiştiriciler ve tür için tek bir harften oluşur:
| Belirteç | Anlamı | sprintf(...) | Sonuç |
|---|---|---|---|
%s | dizge | sprintf('%s', 'PHP') | PHP |
%d | tam sayı (işaretli) | sprintf('%d', 42.9) | 42 |
%f | ondalıklı sayı, varsayılan 6 ondalık | sprintf('%f', 1.5) | 1.500000 |
%.2f | ondalıklı sayı, 2 ondalık | sprintf('%.2f', 1.5) | 1.50 |
%e | bilimsel gösterim | sprintf('%e', 1234.5678) | 1.234568e+3 |
%x / %X | onaltılık | sprintf('%x', 255) | ff |
%o | sekizlik | sprintf('%o', 8) | 10 |
%b | ikilik | sprintf('%b', 5) | 101 |
%c | koddan karakter | sprintf('%c', 65) | A |
%u | işaretsiz tam sayı | sprintf('%u', 3) | 3 |
%% | düz bir yüzde işareti | sprintf('%d%%', 50) | 50% |
Aşağıdaki değerleri değiştirin ve tekrar çalıştırın:
%d bir ondalıklı sayıyı sıfıra doğru keser, bu yüzden 42.9 42 olur. 43 istiyorsanız önce yuvarlayın: sprintf('%d', round(42.9)). 'abc' gibi sayı olmayan bir dizge %d altında 0 olur.
Baştaki sıfırlarla doldurma
% ile harf arasına bir doldurma karakteri ve bir genişlik koyabilirsiniz. %05d "5 genişliğe kadar 0 ile doldur" demektir. Sipariş numaralarını, fatura numaralarını, saatleri ve tarihleri biçimlendirmenin olağan yolu budur.
Genişlik bir alt sınırdır. Genişlikten uzun bir sayı tam olarak yazdırılır.
%05.2f: genişlik ve ondalıklar birlikte
Ondalıklı sayılarda genişlik, ondalık nokta ve eksi işareti dahil sonucun her karakterini sayar. %05.2f biçiminin 3.14159 için 03.14 vermesinin nedeni budur: toplam beş karakter, ikisi noktadan sonra.
%f geçerli yerel ayarın (setlocale() ile ayarlanan) ondalık ayırıcısını kullanır, %F ise her zaman nokta kullanır. Kodunuz bir yerel ayar belirliyorsa ve JSON, CSV veya bir API için noktaya ihtiyacınız varsa %F kullanın.
Metni sütunlarda hizalama
Pozitif bir genişlik sağa hizalar, genişlikten önceki bir - sola hizalar ve ' ardından gelen bir karakter özel bir doldurma karakteri belirler. Birlikte düz metin raporlarını ve fişleri hizalarlar.
%-14s ürün adını sağdan 14 karaktere doldurur, %8.2f fiyatı 8 karakterde sağa hizalar ve boş bir dizgeyle %'-27s 27 tirelik bir çizgi yazdırır. %'*10s boşluk yerine * ile doldurur.
Argümanları yeniden kullanmak veya sıralamak için numaralandırma
%1$s "dizge olarak ilk argüman", %2$d "tam sayı olarak ikinci argüman" demektir. Numaralandırılmış yer tutucular bir değeri iki kez kullanmanıza ya da argüman listesini değiştirmeden sırayı değiştirmenize izin verir; diller arasında kelime sırası farklı olduğunda çevirmenlerin ihtiyaç duyduğu budur.
vsprintf, printf ve dönüş değerleri
vsprintf() değerleri tek bir dizi olarak alır; değerler zaten bir dizide durduğunda kullanışlıdır. printf() yazdırdığı bayt sayısını döndürür ve vprintf(), printf() fonksiyonunun dizi sürümüdür.
printf() sayısına yeni satır dahildir, bu yüzden "Hello\n" 6 bayttır. Çok baytlı metinlerde karakterleri değil baytları sayar.
Az argüman hata fırlatır
PHP 8'den beri değerlerden fazla yer tutucu içeren bir biçim false döndürmek yerine bir ArgumentCountError fırlatır. Bu hatayı gördüğünüzde % yer tutucularını (%% hariç) sayın.
Mesaj biçim dizgesini de bir argüman olarak sayar: ArgumentCountError: 4 arguments are required, 3 given. Fazla argümanlar sessizce yok sayılır, bu yüzden ters hata bir hata olarak görünmez. Bir sprintf sonucu yanlış görünüyorsa biçimi değerlerin yanında yazdırın. Tek ihtiyacınız bir binlik ayırıcıysa number_format() onu sprintf ile kurmaktan daha basittir. Değiştiricilerin tam listesi php.net üzerinde.
Sıkça Sorulan Sorular
PHP'de bir sayının başına nasıl sıfır eklerim?
"00042" döndüren sprintf('%05d', 42) kullanın. 0 doldurma karakteri, 5 ise toplam genişliktir. Bir dizge için str_pad('42', 5, '0', STR_PAD_LEFT) aynı sonucu verir.
sprintf ile bir sayıyı 2 ondalık basamağa nasıl biçimlendiririm?
%.2f kullanın: sprintf('%.2f', 3.14159) "3.14", sprintf('%.2f', 5) ise "5.00" döndürür. Doldurmak için bir genişlik de ekleyin: %08.2f "00003.14" verir.
PHP'de printf ile sprintf arasındaki fark nedir?
sprintf() biçimlendirilmiş dizgeyi döndürür, böylece onu saklayabilirsiniz. printf() onu hemen yazdırır ve yazdırılan bayt sayısını döndürür. echo sprintf(...) ve printf(...) aynı çıktıyı üretir.
PHP'de %s ne anlama gelir?
%s sprintf() ve printf() içinde bir dizge için yer tutucudur: sprintf('Hello, %s', 'Ada') "Hello, Ada" döndürür. %s yer tutucusuna verilen sayılar dizgeye çevrilir. %d tam sayılar, %f ondalıklı sayılar içindir.
sprintf içinde aynı argümanı iki kez nasıl kullanırım?
Yer tutucuları numaralandırın: sprintf('%1$s loves %2$s, and %2$s loves %1$s', 'Ada', 'PHP'). Biçimin etrafında tek tırnak kullanın: çift tırnak içinde PHP $s ifadesini bir değişken olarak okur, bu yüzden "%1$s" %1 ve ardından $s değerine dönüşür.