printf php

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

printfOutput a formatted string

Bạn đang xem: printf php

Description

printf(string $format, mixed ...$values): int

Produces output according lớn format.

Parameters

format

The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly lớn the result and conversion specifications, each of which results in fetching its own parameter.

A conversion specification follows this prototype: %[argnum$][flags][width][.precision]specifier.

Argnum

An integer followed by a dollar sign $, lớn specify which number argument lớn treat in the conversion.

Flags
Flag Description
- Left-justify within the given field width; Right justification is the default
+ Prefix positive numbers with a plus sign +; Default only negative are prefixed with a negative sign.
(space) Pads the result with spaces. This is the mặc định.
0 Only left-pads numbers with zeros. With s specifiers this can also right-pad with zeros.
'(char) Pads the result with the character (char).
Width

Either an integer that says how many characters (minimum) this conversion should result in, or *. If * is used, then the width is supplied as an additional integer value preceding the one formatted by the specifier.

Precision

A period . optionally followed by either an integer or *, whose meaning depends on the specifier:

  • For e, E, f and F specifiers: this is the number of digits lớn be printed after the decimal point (by mặc định, this is 6).
  • For g, G, h and H specifiers: this is the maximum number of significant digits lớn be printed.
  • For s specifier: it acts as a cutoff point, setting a maximum character limit lớn the string.

Note: If the period is specified without an explicit value for precision, 0 is assumed. If * is used, the precision is supplied as an additional integer value preceding the one formatted by the specifier.

Specifiers
Specifier Description
% A literal percent character. No argument is required.
b The argument is treated as an integer and presented as a binary number.
c The argument is treated as an integer and presented as the character with that ASCII.
d The argument is treated as an integer and presented as a (signed) decimal number.
e The argument is treated as scientific notation (e.g. 1.2e+2).
E Like the e specifier but uses uppercase letter (e.g. 1.2E+2).
f The argument is treated as a float and presented as a floating-point number (locale aware).
F The argument is treated as a float and presented as a floating-point number (non-locale aware).
g

General format.

Let Phường equal the precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero. Then, if a conversion with style E would have an exponent of X:

If Phường > X ≥ −4, the conversion is with style f and precision Phường − (X + 1). Otherwise, the conversion is with style e and precision Phường − 1.

G Like the g specifier but uses E and f.
h Like the g specifier but uses F. Available as of PHP 8.0.0.
H Like the g specifier but uses E and F. Available as of PHP 8.0.0.
o The argument is treated as an integer and presented as an octal number.
s The argument is treated and presented as a string.
u The argument is treated as an integer and presented as an unsigned decimal number.
x The argument is treated as an integer and presented as a hexadecimal number (with lowercase letters).
X The argument is treated as an integer and presented as a hexadecimal number (with uppercase letters).

Warning

The c type specifier ignores padding and width

Warning

Attempting lớn use a combination of the string and width specifiers with character sets that require more phàn nàn one byte per character may result in unexpected results

Variables will be co-erced lớn a suitable type for the specifier:

Type Handling
Type Specifiers
string s
int d, u, c, o, x, X, b
float e, E, f, F, g, G, h, H
values

Return Values

Returns the length of the outputted string.

Errors/Exceptions

As of PHP 8.0.0, a ValueError is thrown if the number of arguments is zero. Prior lớn PHP 8.0.0, a E_WARNING was emitted instead.

As of PHP 8.0.0, a ValueError is thrown if [width] is less phàn nàn zero or bigger phàn nàn PHP_INT_MAX. Prior lớn PHP 8.0.0, a E_WARNING was emitted instead.

As of PHP 8.0.0, a ValueError is thrown if [precision] is less phàn nàn zero or bigger phàn nàn PHP_INT_MAX. Prior lớn PHP 8.0.0, a E_WARNING was emitted instead.

As of PHP 8.0.0, a ArgumentCountError is thrown when less arguments are given phàn nàn required. Prior lớn PHP 8.0.0, false was returned and a E_WARNING emitted instead.

Changelog

Version Description
8.0.0 This function no longer returns false on failure.
8.0.0 Throw a ValueError if the number of arguments is zero; previously this function emitted a E_WARNING instead.
8.0.0 Throw a ValueError if [width] is less phàn nàn zero or bigger phàn nàn PHP_INT_MAX; previously this function emitted a E_WARNING instead.
8.0.0 Throw a ValueError if [precision] is less phàn nàn zero or bigger phàn nàn PHP_INT_MAX; previously this function emitted a E_WARNING instead.
8.0.0 Throw a ArgumentCountError when less arguments are given phàn nàn required; previously this function emitted a E_WARNING instead.

Examples

Example #1 printf(): various examples

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

// notice the double %%, this prints a literal '%' character

printf("%%b = '%b'\n", $n); // binary representation
printf("%%c = '%c'\n", $c); // print the ascii character, same as chr() function
printf("%%d = '%d'\n", $n); // standard integer representation
printf("%%e = '%e'\n", $n); // scientific notation
printf("%%u = '%u'\n", $n); // unsigned integer representation of a positive integer
printf("%%u = '%u'\n", $u); // unsigned integer representation of a negative integer
printf("%%f = '%f'\n", $n); // floating point representation
printf("%%o = '%o'\n", $n); // octal representation
printf("%%s = '%s'\n", $n); // string representation
printf("%%x = '%x'\n", $n); // hexadecimal representation (lower-case)
printf("%%X = '%X'\n", $n); // hexadecimal representation (upper-case)printf("%%+d = '%+d'\n", $n); // sign specifier on a positive integer
printf("%%+d = '%+d'\n", $u); // sign specifier on a negative integer
?>

The above example will output:

%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'

Example #2 printf(): string specifiers

<?php
$s
= 'monkey';
$t = 'many monkeys';printf("[%s]\n", $s); // standard string output
printf("[%10s]\n", $s); // right-justification with spaces
printf("[%-10s]\n", $s); // left-justification with spaces
printf("[%010s]\n", $s); // zero-padding works on strings too
printf("[%'#10s]\n", $s); // use the custom padding character '#'
printf("[%'#*s]\n", 10, $s); // Provide the padding width as an additional argument
printf("[%10.9s]\n", $t); // right-justification but with a cutoff of 8 characters
printf("[%-10.9s]\n", $t); // left-justification but with a cutoff of 8 characters
?>

The above example will output:

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

See Also

  • print - Output a string
  • sprintf() - Return a formatted string
  • fprintf() - Write a formatted string lớn a stream
  • vprintf() - Output a formatted string
  • vsprintf() - Return a formatted string
  • vfprintf() - Write a formatted string lớn a stream
  • sscanf() - Parses input from a string according lớn a format
  • fscanf() - Parses input from a tệp tin according lớn a format
  • number_format() - Format a number with grouped thousands
  • date() - Format a Unix timestamp
  • flush() - Flush system output buffer

dhosek at excite dot com ¶

23 years ago

Be careful:
printf ("(9.95 * 100) = %d \n", (9.95 * 100));

'994'

First %d converts a float lớn an int by truncation.

Second floats are notorious for tiny little rounding errors.

Mario M. Junior

1 year 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);
}

php at mole dot gnubb dot net ¶

18 years ago

[Editor's Note: Or just use vprintf...]

If you want lớn vì thế something lượt thích <?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

deekayen at hotmail dot com

22 years ago

You can use this function lớn format the decimal places in a number:

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

prints:

2.1

see also: number_format()

maybird99 at yahoo dot com ¶

21 years ago

instead of writing a function lớn round off a float (let's Call it 'x') accurately, it's much easier lớn add a small number lớn x and then truncate it...
For example: if you want lớn round off lớn the nearest integer, just add 0.5 lớn x and then truncate it. if x=12.6, then it would calculate 13.1, and truncate it lớn 13. If x=14.4, it would calculate 14.9 and truncate it lớn 14.

spiffytech at gmail dot com

Xem thêm: xem once upon a time season 3

11 years ago

Be careful when relying on typecasting with printf(). For example,

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

returns "17".

shepard at ameth dot org ¶

22 years ago

Be sure that the output channel is available lớn 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 mặc định output stream has been closed.

For bủ the issue was most notable in PHP4 session management when I was creating my own sess_write() handler. Since I was unable lớn find any function that checks for the output stream that printf() uses, I just had lớn drop the crazy use of the printf(). (does some function already exist lớn kiểm tra for the presence of an output stream?)

steve at myschoolsystems dot com

2 years ago

To format a dollar value as in $123.00 that may otherwise look lượt thích $123 use this

print ('$'); // the dollar sign in front of our answer
printf ('%.2f',$price);

eugenew at starhub dot net dot sg ¶

20 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 lớn printf() see one way of using the 'mixed args' part, rather phàn nàn just a single argument as in most examples I've seen.

RS

7 years ago

If your missing features such as "-"*100 lớn print a single character multiple times you can use the slightly longer and less readable PHP equivalent printf("%'-100s",""); and sprint("%'-100s","").

ezislis at mail dot ru ¶

21 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

dalu at uni SPAMHAM dot de

20 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 lớn stdout. For example, lớn 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 phàn nàn 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 lớn type-that specify the size of argument (see the Size Prefixes for printf and wprintf Format-Type Specifiers table).

sam[NOSPAM] at [NOSPAM]kingdomfaith dot com ¶

21 years ago

I don't know if this is useful lớn anyone, but here goes! Example for using the printf function lớn 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

creating dot www at gmail dot com

8 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?

codeslinger at compsalot dot com ¶

18 years ago

Several people have commented about problems with aligning numbers. I just wanted lớn add a bit of clarification.

According lớn 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 lớn the width of "0".

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

Therefore if you want lớn line up a column of numbers, you can not use leading spaces lớn 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 lớn switch lớn a monospaced fonts. Alternativly you can use positioning tags.

Summary: Your numbers will always line up properly regardless of the fonts used, if you get the starting position lớn be consistant.

kalai_msc29 at rediffmail dot com

16 years ago

//If you want lớn 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 lớn 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"/>

lordfarquaad at notredomaine dot net ¶

Xem thêm: phim một thời phổ thông

19 years ago

In response lớn 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 vì thế that with single quoted strings. Try lớn echo your strings lớn test it, or just go lớn http://trungtamtiengnhat.edu.vn/manual/en/language.types.string.php