printf

(PHP 4, PHP 5, PHP 7, PHP 8)

printfBiçemli bir dizge çıktılar

Açıklama

printf(string $biçem, mixed ...$değerler): int

Belirtilen biçem dizgesine göre üretilmiş bir dizge çıktılar.

Bağımsız Değişkenler

biçem

Biçem dizgesi sıfır veya daha fazla yönergeden oluşur: doğrudan sonuca kopyalanmış sıradan karakterler (% hariç) ve dönüşüm belirtimleri, her biri kendi bağımsız değişkeninin getirilmesiyle sonuçlanır.

Bir dönüşüm belirtiminin sözdizimi: %[degnum$][seçenekler][genişlik][.hassasiyet]belirteç.

degnum

Ardına bir dolar imi $ konmuş bir tamsayı; dönüşümde ele alınacak bağımsız değişken sayısını belirler.

seçenekler
Seçenek Açıklama
- Verilen alan genişliğinde sola dayalı; Sağa dayalılık öntanımlıdır.
+ Pozitif sayıların önüne artı imi konur; Öntanımlı olarak sadece negatif sayılara eksi imi konur.
(boşluk) Sonuca boşluklarla dolgu yapar. Bu öntanımlıdır.
0 Sayılar sadece soldan sıfırla doldurulur. s belirteçleri ile sağ taraf da sıfırla doldurulur.
'(krk) Sonuca (krk) karakteri ile dolgu yapılır.

genişlik

Bu dönüşümün kaç karakterle sonuçlanacağının belirtildiği tamsayı veya *. * kullanılmışsa, genişlik, belirtici tarafından biçimlendirilmiş değerden önce ek bir tamsayı değeri olarak sağlanır.

hassasiyet

Bir nokta . ve ardından anlamı belirtece bağlı olan seçimlik bir tamsayı veya *:

  • e, E, f ve F belirteçleri için: ondalık noktadan sonra yazdırılacak rakam sayısı (6 öntanımlıdır)
  • g ve G, h ve H belirteçleri için: yazdırılacak maksimum anlamlı basamak sayısı.
  • s belirteci için: dizeye azami karakter sınırı koyan bir kesme noktası gibi davranır.

Bilginize: Nokta, hassasiyet için açık bir değer olmadan belirtilirse, 0 varsayılır. * kullanılmışsa, genişlik, belirtici tarafından biçimlendirilmiş değerden önce ek bir tamsayı değeri olarak sağlanır.

Belirteçler
Belirteç Açıklama
% Yüzde karakteri. Değer gerekmez.
b Değer bir tamsayı olarak ele alınır ve ikil bir sayı olarak gösterilir.
c Değer bir tamsayı olarak ele alınır ve ASCII bir karakter olarak gösterilir.
d Değer bir tamsayı olarak ele alınır ve (işaretli) bir ondalık sayı olarak gösterilir.
e Değer bilimsel bir gösterim (örn. 1.2e+2) olarak ele alınır. Hassasiyet belirteci,ondalık noktadan sonraki basamakların sayısını ifade eder.
E e belirteci gibi, farklı olarak büyük harf kullanır (örn. 1.2E+2).
f Değer kayan noktalı sayı olarak ele alınır ve kayan noktalı sayı olarak gösterilir (yerele uygun).
F Değer kayan noktalı sayı olarak ele alınır ve kayan noktalı sayı olarak gösterilir (yerele bakmaz) PHP 5.0.3 ve sonrasında kullanılabilir.
g

Genel biçem.

P sıfırdan farklı hassasiyet olsun, hassasiyet verilmemişse 6, hassasiyet sıfır ise 1 olsun. E tarzındaki dönüşümün üssü X ise:

P > X ≥ −4 ise, dönüşüm f tarzı ve hassasiyet P − (X + 1) olur. Aksi takdirde, dönüşüm e tarzı ve hassasiyet P − 1 olur.

G g gibidir fakat E ve f kullanır.
h g gibidir fakat F kullanır. PHP 8.0.0 ve sonrasında kullanılabilir.
H ggibidir fakat E ve F kullanır. PHP 8.0.0 ve sonrasında kullanılabilir.
o Değer bir tamsayı olarak ele alınır ve sekizlik bir sayı olarak gösterilir.
s Değer bir dizge olarak ele alınır ve gösterilir.
u Değer bir tamsayı olarak ele alınır ve işaretsiz bir ondalık sayı olarak gösterilir.
x Değer bir tamsayı olarak ele alınır ve onaltılık bir sayı olarak gösterilir (küçük harfli).
X Değer bir tamsayı olarak ele alınır ve onaltılık bir sayı olarak gösterilir (büyük harfli).

Uyarı

c tür belirteci dolguyu ve genişliği yoksayar.

Uyarı

Karakter başına birden fazla bayt gerektiren karakter kümeleriyle dizge ve genişlik belirteçlerini bir arada kullanmaya çalışmak, beklenmeyen sonuçlar verebilir

Değişkenler, belirteç için uygun bir türe zorlanacaktır:

Tür Yönetimi
Tür Belirteçler
string s
int d, u, c, o, x, X, b
double e, E, f, F, g, G, h, H

değerler

Dönen Değerler

Çıktılanın dizgenin uzunluğunu döndürür.

Hatalar/İstisnalar

PHP 8.0.0 ve sonrasında, bağımsız değişken sayısı sıfırsa ValueError oluşuyor. PHP 8.0.0 öncesinde bunun yerine bir E_WARNING uyarısı verilirdi.

PHP 8.0.0 ve sonrasında, [width] (genişlik) sıfırdan küçükse veya PHP_INT_MAX'tan büyükse bir ValueError oluşuyor. PHP 8.0.0 öncesinde, bir E_WARNING uyarısı verilirdi.

PHP 8.0.0 ve sonrasında, [precision] (hassasiyet) sıfırdan küçükse veya PHP_INT_MAX'tan büyükse bir ValueError oluşuyor. PHP 8.0.0 öncesinde, bir E_WARNING uyarısı verilirdi.

PHP 8.0.0 ve sonrasında, gereğinden daha az bağımsız değişken verildiğinde bir ArgumentCountError oluşuyor. PHP 8.0.0 öncesinde, bir E_WARNING uyarısı verilirdi.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 Bu işlev başarısızlık durumunda artık false döndürmüyor.
8.0.0 Bağımsız değişken sayısı sıfırsa ValueError oluşuyor. Evvelce bunun yerine bir E_WARNING uyarısı verilirdi.
8.0.0 [width] (genişlik) sıfırdan küçükse veya PHP_INT_MAX'tan büyükse bir ValueError oluşuyor; evvelce bir E_WARNING uyarısı verilirdi.
8.0.0 [precision] (hassasiyet) sıfırdan küçükse veya PHP_INT_MAX'tan büyükse bir ValueError oluşuyor; evvelce bir E_WARNING uyarısı verilirdi.
8.0.0 Gereğinden daha az bağımsız değişken verildiğinde bir ArgumentCountError oluşuyor; evvelce bir E_WARNING uyarısı verilirdi.

Örnekler

Örnek 1 - printf(): çeşitli örnekler

<?php
$n
= 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'

// dikkat: çift %%, tek bir '%' karakteri basar
printf("%%b = '%b'\n", $n); // ikil gösterim
printf("%%c = '%c'\n", $c); // ascii karakter basar, chr() işleviyle aynı
printf("%%d = '%d'\n", $n); // standart tamsayı gösterimi
printf("%%e = '%e'\n", $n); // bilimsel gösterim
printf("%%u = '%u'\n", $n); // işaretsiz pozitif tamsayı gösterimi
printf("%%u = '%u'\n", $u); // işaretsiz negatif tamsayı gösterimi
printf("%%f = '%f'\n", $n); // kayan noktalı sayı gösterimi
printf("%%o = '%o'\n", $n); // sekizlik gösterim
printf("%%s = '%s'\n", $n); // dizgesel gösterim
printf("%%x = '%x'\n", $n); // onaltılık küçük harf gösterimi
printf("%%X = '%X'\n", $n); // onaltılık büyük harf gösterimi

printf("%%+d = '%+d'\n", $n); // pozitif tamsayıda işaret belirteci
printf("%%+d = '%+d'\n", $u); // negatif tamsayıda işaret belirteci
?>

Yukarıdaki örneğin çıktısı:

%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'

Örnek 2 - printf(): dizge belirteçleri

<?php
$s
= 'monkey';
$t = 'many monkeys';

printf("[%s]\n", $s); // standart dizge çıktısı
printf("[%10s]\n", $s); // boşluk dolgulu sağa yanaşık
printf("[%-10s]\n", $s); // boşluk dolgulu sola yanaşık
printf("[%010s]\n", $s); // sıfır dolgulu sağa yanaşık
printf("[%'#10s]\n", $s); // '#' dolgulu sağa yanaşık
printf("[%'#*s]\n", 10, $s); // dolgu genişliği ek bağımsız değişken olarak sağlanır
printf("[%10.9s]\n", $t); // 9 karakterden kırparak sağa yanaşık
printf("[%-10.9s]\n", $t); // 9 karakterden kırparak sola yanaşık
?>

Yukarıdaki örneğin çıktısı:

[monkey]
[    monkey]
[monkey    ]
[0000monkey]
[####monkey]
[####monkey]
[ many monk]
[many monk ]

Ayrıca Bakınız

  • print - Bir dizge çıktılar
  • sprintf() - Biçemli bir dizge döndürür
  • fprintf() - Biçemli dizgeyi bir akıma yazar
  • vprintf() - Biçemli bir dizge çıktılar
  • vsprintf() - Biçemli bir dizge döndürür
  • vfprintf() - Biçemli dizgeyi bir akıma yazar
  • sscanf() - Girdi dizgesini belli bir biçeme göre yorumlar
  • fscanf() - Bir dosyadaki girdiyi belli bir biçeme göre çözümler
  • number_format() - Sayıyı binlik bölümlere ayırır
  • date() - Unix zaman damgasını biçimlendirir
  • flush() - Sistem çıktı tamponunu boşaltır

add a note add a note

User Contributed Notes 17 notes

up
18
dhosek at excite dot com
25 years ago
Be careful:
printf ("(9.95 * 100) = %d \n", (9.95 * 100));

'994'

First %d converts a float to an int by truncation.

Second floats are notorious for tiny little rounding errors.
up
3
php at mole dot gnubb dot net
19 years ago
[Editor's Note: Or just use vprintf...]

If you want to do something like <?php printf('There is a difference between %s and %s', array('good', 'evil')); ?> (this doesn't work)  instead of <?php printf('There is a difference between %s and %s', 'good', 'evil'); ?> you can use this function:

<?php
function printf_array($format, $arr)
{
    return
call_user_func_array('printf', array_merge((array)$format, $arr));
}
?>

Use it the following way:
<?php
$goodevil
= array('good', 'evil');
printf_array('There is a difference between %s and %s', $goodevil);
?>
and it will print:
There is a difference between good and evil
up
-2
deekayen at hotmail dot com
23 years ago
You can use this function to format the decimal places in a number:

$num = 2.12;
printf("%.1f",$num);

prints:

2.1

see also: number_format()
up
-1
Mario M. Junior
2 years ago
To provide a more user-friendly interface, you can use colors when printing text in the terminal.

p('Ordinary text.');
p('Warning: Check this out...', 'info');
p('Ops! Something went wrong.', 'error');
p('Yeah... done!', 'success');

function p($text, $style = '', $newLine = true) {

    $styles = array(
        'success' => "\033[0;32m%s\033[0m",
        'error'   => "\033[31;31m%s\033[0m",
        'info'    => "\033[33;33m%s\033[0m",

        'Black'    => "\033[0;30m%s\033[0m",
        'Red'      => "\033[0;31m%s\033[0m",
        'Green'    => "\033[0;32m%s\033[0m",
        'Yellow'   => "\033[0;33m%s\033[0m",
        'Blue'     => "\033[0;34m%s\033[0m",
        'Purple'   => "\033[0;35m%s\033[0m",
        'Cyan'     => "\033[0;36m%s\033[0m",
        'Gray'     => "\033[0;37m%s\033[0m",
        'Graphite' => "\033[1;30m%s\033[0m",

        'Bold Red'    => "\033[1;31m%s\033[0m",
        'Bold Green'  => "\033[1;32m%s\033[0m",
        'Bold Yellow' => "\033[1;33m%s\033[0m",
        'Bold Blue'   => "\033[1;34m%s\033[0m",
        'Bold Purple' => "\033[1;35m%s\033[0m",
        'Bold Cyan'   => "\033[1;36m%s\033[0m",
        'Bold White'  => "\033[1;37m%s\033[0m",

        'Bg Black'  => "\033[40;1;37m%s\033[0m",
        'Bg Red'    => "\033[41;1;37m%s\033[0m",
        'Bg Green'  => "\033[42;1;37m%s\033[0m",
        'Bg Yellow' => "\033[43;1;37m%s\033[0m",
        'Bg Blue'   => "\033[44;1;37m%s\033[0m",
        'Bg Purple' => "\033[45;1;37m%s\033[0m",
        'Bg Cyan'   => "\033[46;1;37m%s\033[0m",
        'Bg Gray'   => "\033[47;1;37m%s\033[0m",

        'Underscore' => "\033[4;37m%s\033[0m",
        'Inverted'   => "\033[7;37m%s\033[0m",
        'Blink'      => "\033[5;37m%s\033[0m",
    );

    $format = '%s';

    if (isset($styles[$style])) {
        $format = $styles[$style];
    }

    if ($newLine) {
        $format .= PHP_EOL;
    }

    printf($format, $text);
}
up
-3
maybird99 at yahoo dot com
22 years ago
instead of writing a function to round off a float (let's call it 'x') accurately, it's much easier to add a small number to x and then truncate it...
For example: if you want to round off to the nearest integer, just add 0.5 to x and then truncate it. if x=12.6, then it would calculate 13.1, and truncate it to 13. If x=14.4, it would calculate 14.9 and truncate it to 14.
up
-15
spiffytech at gmail dot com
12 years ago
Be careful when relying on typecasting with printf(). For example,

    printf("%d", "17,999")

returns "17".
up
-11
shepard at ameth dot org
23 years ago
Be sure that the output channel is available to write on before executing printf()!  Some functions in classes available from various sources (in my case, DB_Sql::query() in PHPLIB) assume that printing will work, even after the default output stream has been closed. 

For me the issue was most notable in PHP4 session management when I was creating my own sess_write() handler.  Since I was unable to find any function that checks for the output stream that printf() uses, I just had to drop the crazy use of the printf(). (does some function already exist to check for the presence of an output stream?)
up
-7
steve at myschoolsystems dot com
3 years ago
To format a dollar value as in $123.00 that may otherwise look like $123  use this

print ('$');                    // the dollar sign in front of our answer
printf ('%.2f',$price);
up
-14
eugenew at starhub dot net dot sg
22 years ago
If anyone is looking for writing a quine using printf(),
this is my example:

<?php $f='<?php $f=%c%s%c; printf($f,39,$f,39); ?>'; printf($f,39,$f,39); ?>

This also helps those who are new to printf() see one way of using the 'mixed args' part, rather than just a single argument as in most examples I've seen.
up
-17
ezislis at mail dot ru
22 years ago
be careful with integers, they cant hold large values.

printf("%d",10023123553.45634663);
will print out: 1433188961
and
printf("%.0f",10023123553.45634663);
will print out: 10023123553
up
-14
RS
8 years ago
If your missing features such as "-"*100 to print a single character multiple times you can use the slightly longer and less readable PHP equivalent printf("%'-100s",""); and sprint("%'-100s","").
up
-18
dalu at uni SPAMHAM dot de
22 years ago
copypasted from msdn

A format specification, which consists of optional and required fields, has the following form:

%[flags] [width] [.precision] [{h | l | I64 | L}]type

Each field of the format specification is a single character or a number signifying a particular format option. The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign is followed by a character that has no meaning as a format field, the character is copied to stdout. For example, to print a percent-sign character, use %%.

The optional fields, which appear before the type character, control other aspects of the formatting, as follows:

type
Required character that determines whether the associated argument is interpreted as a character, a string, or a number (see the printf Type Field Characters table.
flags
Optional character or characters that control justification of output and printing of signs, blanks, decimal points, and octal and hexadecimal prefixes (see the Flag Characters table). More than one flag can appear in a format specification.
width
Optional number that specifies the minimum number of characters output (see printf Width Specification).
precision
Optional number that specifies the maximum number of characters printed for all or part of the output field, or the minimum number of digits printed for integer values (see the How Precision Values Affect Type table).
h | l | I64 | L
Optional prefixes to type-that specify the size of argument (see the Size Prefixes for printf and wprintf Format-Type Specifiers table).
up
-26
creating dot www at gmail dot com
9 years ago
Why rounding is not same as for round()?

Try this code:

<?php
printf
("%.02lf\n", 1.035);
printf("%.02lf\n", round(1.035, 2));
?>
Result:
1.03
1.04

In my opion it should be:
1.04
1.04

Why is that?
up
-22
sam[NOSPAM] at [NOSPAM]kingdomfaith dot com
22 years ago
I don't know if this is useful to anyone, but here goes! Example for using the printf function to output an object.

class person
{
    var $name = "";
    function name($newname = NULL)
    {
        if(! is_null($newname))
        {
            $this->name=$newname;
        }
        return $this->name;
    }
    var $surname = "";
    function surname($newsurname = NULL)
    {
        if(! is_null($newsurname))
        {
            $this->surname=$newsurname;
        }
        return $this->surname;
    }
    var $age = "";
    function age($newage = NULL)
    {
        if(! is_null($newage))
        {
            $this->age=$newage;
        }
        return $this->age;
    }
}

$bob = new person;
$bob->name('Bob');
$bob->surname('Builder');
$bob->age('50');

printf("Hi %s, your surname is %s and you are %s years old", $bob->name, $bob->surname, $bob->age);

Outputs:

Hi Bob, your surname is Builder and you are 50 years old
up
-22
codeslinger at compsalot dot com
19 years ago
Several people have commented about problems with aligning numbers.  I just wanted to add a bit of clarification.

According to the spec all True Type Fonts (especially porpotional spaced fonts) use a fixed width for numeric digits.  All digits have the same width which is equal to the width of "0".

Where things go haywire when trying to align numbers is that the space character does not have the same width as a digit when using a porportional spaced font.

Therefore if you want to line up a column of numbers, you can not use leading spaces to position them unless you use the same quantity of space characters for each row. e.g. your numbers have leading zeros etc.

The simplest solution is to switch to a monospaced font.  Alternativly you can use positioning tags.

Summary: Your numbers will always line up properly regardless of the font used, if you get the starting position to be consistant.
up
-22
kalai_msc29 at rediffmail dot com
17 years ago
//If you want to make many Hidden fields you can use the function
//You can pass the values as array value,This will help you, when you are going to post many hiddend fields:-
function MakeHidden($ArrValues)
    {
       global $dearvar;
       echo $dearvar;
       if(is_array($ArrValues)){
             foreach($ArrValues as $key=>$values)
              {
                 echo $MakeHTML = "<input type='hidden' name='$values' value='$values'>";
               }
      }   
     
     
      else {
            echo $MakeHTML = "<input type='hidden' name='$ArrValues' value='$ArrValues'>";
         }
   return $MakeHTML;
}

//example:-

MakeHidden(array("value1","value2","value3"));

//OutPut :-

<input type="hidden" value="value1" name="value1"/>
<input type="hidden" value="value2" name="value2"/>
<input type="hidden" value="value3" name="value3"/>
up
-25
lordfarquaad at notredomaine dot net
20 years ago
In response to chris dot breen at accurate dot com :

This will work, but i didn't try:
<?php
$format
= 'The %2$s contains %1$d monkeys.
         That is a nice %2$s full of %1$d monkeys.'
;
printf($format, $num, $location);
?>

Your problem came from the fact that in the string "\$s", the $ is simply escaped by the \, but but you must not do that with single quoted strings. Try to echo your strings to test it, or just go to http://www.php.net/manual/en/language.types.string.php
To Top