PHP 8.0.0 Released!

vprintf

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

vprintfOutput a formatted string

Descrierea

vprintf ( string $format , array $args ) : int

Display array values as a formatted string according to format (which is described in the documentation for sprintf()).

Operates as printf() but accepts an array of arguments, rather than a variable number of arguments.

Parametri

format

Șirul de formatare este compus din zero sau mai multe directive: caractere obișnuite (în afară de %), care sunt copiate direct în rezultat și specificatori de conversie, fiecare având parametrul său.

Un specificator de conversie e compus după următorul prototip: %[argnum$][flags][width][.precision]specifier.

Argnum

Un întreg urmat de senmul dolar $, pentru a specifica ce argument de număr trebuie tratat în conversie.

Flags
Flag Descriere
- Alinierea spre stânga în limitele lungimii câmpului; Implicit se efectuează alinierea spre dreapta
+ Prefixează numerele pozitive cu semnul plus +; implicit doar numerele negative sunt prefixate cu semnul minus.
(spațiu) Completează rezultatul cu spații. Acesta este comportamentul implicit.
0 Completează numerele cu zerouri în stânga. Cu specificatorii s se poate de completat cu zerouri și în dreapta.
'(char) Completează rezultatul cu caracterul (char).

Width

Un număr întreg ce indică câte caractere (minimum) trebuie să aibă rezultatul conversiei.

Precision

Un punct ., urmat de un număr întreg, însemnătatea căruia depinde de specificator:

  • Pentru specificatorii e, E, f și F: acesta este numărul de cifre ce vor fi tipărite după punctul zecimal (implicit acesta este 6).
  • Pentru specificatorii g și G: acesta este numărul maxim de cifre semnificative ce va fi tipărit.
  • Pentru specificatorul s: acesta funcționează ca punct de oprire, stabilind limita maximă a numărului de caractere din șir.

Notă: Dacă punctul este specificat fără o valoare explicită pentru precizie, se presupune că aceasta este 0.

Notă: Încercarea de a folosi un specificator de poziție mai mare decât PHP_INT_MAX va genera avertizări.

Specifiers
Specifier Descriere
% Specifică caracterul procent. Nu este necesar vre-un argument.
b Argumentul este tratat ca un întreg și prezentat ca număr binar.
c Argumentul este tratat ca un întreg și prezentat ca caracter cu acest cod ASCII.
d Argumentul este tratat ca un întreg și prezentat ca număr zecimal (cu semn).
e Argumentul este tratat ca număr în notație exponențială (de ex. 1.2e+2). Specificatorul de precizie semnifică numărul de cifre după virgulă începând cu PHP 5.2.1. În versiuni anterioare el specifica numărul de cifre semnificative (cu una mai puțin).
E La fel ca și specificatorul e, dar folosește caracterul majuscul (de ex. 1.2E+2).
f Argumentul este tratat ca număr cu virgulă și prezentat ca atare (în dependență de setările de localizare).
F Argumentul este tratat ca număr cu virgulă și prezentat ca atare (fără a se ține cont de setările de localizare). Disponibil începând cu PHP 5.0.3.
g

Format general.

Fie că P este egal cu precizia, dacă nu este zero, 6 dacă precizia este omisă, sau 1 dacă precizia este zero. Atunci dacă o conversie cu stilul E ar avea un exponent X:

Dacă P > X ≥ −4, atunci conversia este de stilul f și precizia P − (X + 1). În caz contrar, conversia este de stilul e și precizia P − 1.

G La fel ca și specificatorul g, dar utilizează E și f.
o Argumentul este tratat ca întreg și prezentat ca număr octal.
s Argumentul este tratat și prezentat ca șir de caractere.
u Argumentul este tratat ca întreg și prezentat ca număr zecimal fără semn.
x Argumentul este tratat ca întreg și prezentat ca număr hexazecimal (cu caractere minuscule).
X Argumentul este tratat ca întreg și prezentat ca număr hexazecimal (cu caractere majuscule).

Avertizare

Specificatorul de tip c ignoră completarea cu spații și lungimea

Avertizare

Încercarea de a folosi o combinație din specificatori de șiruri de caractere și lungime cu seturi de caractere ce necesită mai mult de un octet per caracter poate da rezultate imprevizibile

Variabilele vor fi aduse la un tip potrivit pentru specificatorul:

Manipularea tipurilor
Tipul Specificatorii
string s
integer d, u, c, o, x, X, b
double g, G, e, E, f, F

args

Valorile întoarse

Returns the length of the outputted string.

Exemple

Example #1 vprintf(): zero-padded integers

<?php
vprintf
("%04d-%02d-%02d"explode('-''1988-8-1'));
?>

Exemplul de mai sus va afișa:

1988-08-01

A se vedea și

  • printf() - Output a formatted string
  • sprintf() - Return a formatted string
  • fprintf() - Write a formatted string to a stream
  • vsprintf() - Return a formatted string
  • vfprintf() - Write a formatted string to a stream
  • sscanf() - Parses input from a string according to a format
  • fscanf() - Parses input from a file according to a format
  • number_format() - Format a number with grouped thousands
  • date() - Formatează o oră/dată

add a note add a note

User Contributed Notes 8 notes

up
9
steve at stevelockwood dot net
5 years ago
If, instead of an array, you pass an object PHP will automatically cast the object as an array so you can use it directly in vprintf.
<?php
$object
= new stdClass();
$object->Property1 = 'Value 1';
$object->Property2 = 'Value 2';
vprintf('%-20s %-20s', $object);

/* will output
Value 1              Value 2            
*/
?>
up
1
tehjosh at gamingg dot net
13 years ago
To toolofthesystem at gmail dot com:

You don't need to use output buffering with vprintf() because you can use vsprintf(), which has the same functionality as vprintf(), except that it returns the resulting string instead of outputting it.
up
0
taken from &#34;Php Phrasebook&#34;
12 years ago
<?php
$string
= 'The site runs on PHP '.phpversion();
preg_match('/php ((\d)\.\d\.\d+)/i',$string,$matches);
print_r($matches);
vprintf('Match: %s<br /> Version %s; Major:%d.',$matches);
?>

output:
Array ( [0] => PHP 5.2.5 [1] => 5.2.5 [2] => 5 )
Match: PHP 5.2.5 Version 5.2.5; Major:5.

For preg_match:

If matches  is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1]  will have the text that matched the first captured parenthesized subpattern, and so on.
up
0
toolofthesystem at gmail dot com
13 years ago
This function comes useful sometimes when trying to list information returned from MySQL:

function print_sql($query,$printf){
    $sql_sql = mysql_query($query);
    while($sql = mysql_fetch_row($sql_sql)){
        vprintf($printf,$sql);
    }
}

Unfortunately, this seems to sneak its way past output buffering when I tried creating an argument to allow it to be contained in a returned string... either that or I didn't do it right.
up
0
caleb at tekhawk dot com
13 years ago
i know that you can use %1$s or %3$s to select the first or third string but how can you or can you use array names to select it

something like %'user'$s $'email'$s

i tend to add things to my databases over time and this could save loads of recoding
up
-1
phpcoder at gmail dot com
1 year ago
Using the ... operator, vprintf($format, $array) is basically just printf($format, ...$array).
up
-2
Chris
8 years ago
Another way to display arrays is use an array_walk(). This can be useful inline echo/print where a foreach wouldn't work, e.g.

<?php
echo "These errors: ", (unset)array_walk($msgs, function($a) { echo "<p>$a</p>"; } ), "must be corrected.";
?>
up
-2
badcop666 at hotmail dot com
12 years ago
For blocks of text, sprintf() is slow according to my tests.

Also, having the mapping between place-holders and the list of actual variables or datastructures often makes this code difficult to read. But the printf() family are widely supported and have a huge range of nice features. Performance is a cold mistress though!

From an ease-of-reading and maintenance, debugging point of view, I much prefer HEREDOC and "...{$variable}..." methods.

For a block of HTML markup with place holders, the fastest by far was:-

?>
<div> markup etc<?= $variable ?>more markup
<?

My tests comprised 20 runs of a loop of 1 million iterations with output buffering, ditching the buffer on each loop.

The timings ranged from average 2.1msec/million repetitions for the <?= $var ?> method up to 7.6msec/million using printf().

I'll try some benchmarking tools too, since I just wrote this myself and it could be introducing bias, but they've run on dev servers with low load.

Hopefully interesting.
To Top