Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : String Functions : printf

printf

Output a formatted string (PHP 4, PHP 5)
int printf ( string format [, mixed args [, mixed ...]] )

Produces output according to format.

Parameters

format

See sprintf() for a description of format.

args
...

Return Values

Returns the length of the outputted string.

Related Examples ( Source code ) » printf
















Code Examples / Notes » printf

php

[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


deekayen

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()


arunass

There are times when you don't want a number like .0002 to be truncated to .00 - where you'd like to actually have at least some number of significant digits, not just the decimal places.
Here's a sample of how you might do that, although scientific notation might be better.  Why doesn't PHP support some of the other C style floating point formats?
//  string FloatFormat(float $Value, int $Precision)
//  - AGS 21/08/2000
//
//There is no range checking performed here so the
//  function will vaporize on out of range values.
function FloatFormat($Value, $Precision)
{
   $decimals = log10(abs($Value));

   $decimals = - (intval(min($decimals, 0)) - $Precision);

   $format = "%." . $decimals . "f";
   return sprintf($format, $Value);
}


jeremiah

Someone mentioned that the dropping of digits is pernicious; here's a small function you can throw in an include file or something to ensure some accurate precision.
//---------------------
// float precision (float, integer)
//
//                  - jlph 6.30.2000
//
// A function to limit the # of decimal places
// displayed in a float. Takes a float and an integer.
// The float will be taken to the decimal place
// specified by the integer and rounded up accordingly.
// Returns a float with the corners smoothed off.
//---------------------
function precision ($value, $place){
       $value = $value * pow(10, $place + 1);
       $value = floor($value);
       $value = (float) $value/10;
       (float) $modSquad = ($value - floor($value));
       $value = floor($value);
       if ($modSquad > .5){
               $value++;
       }
       return $value / (pow(10, $place));
}
//---------------------


codeslinger

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.


maybird99

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.


wtuomela

Instead of using the precision function above, you can just use printf's precision for floats.  It's just like C, "%.(precision)f".  ex. printf("%.2f", $float); Will print the variable $float with 2 decimal places.

lordfarquaad

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


brian

If you are printing data in a <pre>, courier font, or otherwise non-variable length font (like a terminal), you might have use for printf's justify feature.
<?php
$heading1 = "Label 1";
$heading2 = "Label 2";
$value1 = "31298";
$value2 = "98";
print "<pre>\n";
printf ("%'.-15.15s%'.6.6s\n", $heading1, $value1);
printf ("%'.-15.15s%'.6.6s\n", $heading2, $value2);
print "</pre>\n";
?>
Very handy for simple formatting..


php

If you are experiencing weird difficulties with floating point numbers, namely ones that appear to be overflow errors, then it could be a compilation error. Try the following at a prompt:
python -c 'int(10.1); int(10000.3); int(1.2)'
If that overflows, then you'll need to do the following:
1) Fix your CFLAGS (probably change -march=pentium4 to -march=pentium3)
2) Recompile glibc
3) Recompile mod_php
4) Restart Apache
5) Check your script, it should be fine now
NOTE: This is _not_ a bug in PHP. It just appears that way because there is a problem in the underlying libraries.


eugenew

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.


sam nospam

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


php

for arrays, there is vprintf();
alternatively, if you have it all in one array (including the format), this will do the trick:
<?php
$goodevil = array ('There is a difference between %s and %s', 'good', 'evil');
echo vprintf(array_shift($goodevil),$goodevil);
?>
and without mangling your array, you might use call_user_func_array:
<?php
$goodevil = array ('There is a difference between %s and %s', 'good', 'evil');
echo call_user_func_array('sprintf',$goodevil);
?>


pweinberg

echo vs. print vs. printf
echo simply spits out what you want.  print() is a function that will return either 0 or 1 based on failure or success.  printf is similar but is used for printing formatted output.


dalu

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).


shepard

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


dhosek

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.


ezislis

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


maird

Basic Example:
printf("QueryString is: %s this time",$StringName);


jarred

As far as I know, you should be able to simply include &nbsp; in the format string, so something like this:
printf("Value of I: &nbsp;&nbsp;%d\n", $i);
printf is the C/C++ style of doing formatted output, and as such the only special characters in the format string are '\' and '%', and characters immediately following these special cases may be affected.  (So "%c" mean a character, while "%%c" means print a percent sign followed by the letter c.)


kalai_msc29

//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"/>


Change Language


Follow Navioo On Twitter
addcslashes
addslashes
bin2hex
chop
chr
chunk_split
convert_cyr_string
convert_uudecode
convert_uuencode
count_chars
crc32
crypt
echo
explode
fprintf
get_html_translation_table
hebrev
hebrevc
html_entity_decode
htmlentities
htmlspecialchars_decode
htmlspecialchars
implode
join
levenshtein
localeconv
ltrim
md5_file
md5
metaphone
money_format
nl_langinfo
nl2br
number_format
ord
parse_str
print
printf
quoted_printable_decode
quotemeta
rtrim
setlocale
sha1_file
sha1
similar_text
soundex
sprintf
sscanf
str_getcsv
str_ireplace
str_pad
str_repeat
str_replace
str_rot13
str_shuffle
str_split
str_word_count
strcasecmp
strchr
strcmp
strcoll
strcspn
strip_tags
stripcslashes
stripos
stripslashes
stristr
strlen
strnatcasecmp
strnatcmp
strncasecmp
strncmp
strpbrk
strpos
strrchr
strrev
strripos
strrpos
strspn
strstr
strtok
strtolower
strtoupper
strtr
substr_compare
substr_count
substr_replace
substr
trim
ucfirst
ucwords
vfprintf
vprintf
vsprintf
wordwrap
eXTReMe Tracker