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
*/
?>vprintf
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
vprintf
Референца за `function.vprintf.php` со подобрена типографија и навигација.
vprintf
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
vprintf — Излез форматирана низа
= NULL
Прикажи ги вредностите на низата како форматиран стринг според
format (што е опишано во документацијата за sprintf()).
Врати форматиран стринг printf() Работи како
Параметри
format-
Низата за форматирање се состои од нула или повеќе директиви: обични знаци (со исклучок на
%) што се копираат директно во резултатот и спецификации за конверзија, секоја од кои резултира со добивање на сопствен параметар.Спецификацијата за конверзија следи овој прототип:
%[argnum$][flags][width][.precision]specifier.но прифаќа низа од аргументи, наместо променлив број на аргументи.
Цел број проследен со знак долар
$, за да се специфицира кој број аргумент да се третира во конверзијата.Argnum
Знаменце = NULL -Порамни лево во дадената ширина на полето; Десното порамнување е стандардно +Префикс позитивни броеви со знак плус +; Стандардно само негативните се префиксирани со негативен знак.FlagsЈа пополнува низата со празни места. Ова е стандардно. 0Само лево ги пополнува броевите со нули. Со sспецификатори ова може да ги пополни и десно со нули.'(простор)Го полни резултатот со карактерот (char). Ширина
Или цел број што кажува колку знаци (минимум) треба да резултира оваа конверзија, или
*. Ако*се користи, тогаш ширината се дава како дополнителна цел вредност што му претходи на онаа форматирана од спецификаторот.Прецизност
Период
.опционално проследено со цел број или*, чие значење зависи од спецификаторот:-
За
e,E,fandFспецификатори: ова е бројот на цифри што треба да се испечатат по децималната точка (по дифолт, ова е 6). -
За
g,G,handHспецификатори: ова е максималниот број на значајни цифри што треба да се испечатат. -
За
sспецификатор: делува како точка на прекин, поставувајќи максимално ограничување на карактерите на низата.
Забелешка: Ако е специфициран периодот без експлицитна вредност за прецизност, се претпоставува 0. Ако
*се користи, прецизноста се дава како дополнителна цел вредност што му претходи на онаа форматирана од спецификаторот.Спецификатори Спецификатор = NULL %Буквален процентен знак. Не е потребен аргумент. bАргументот се третира како цел број и се претставува како бинарен број. cАргументот се третира како цел број и се претставува како карактер со таа ASCII. dАргументот се третира како цел број и се претставува како (потпишан) децимален број. eАргументот се третира како научна нотација (на пр. 1.2e+2). EКако eспецификатор, но користи големи букви (на пр. 1.2E+2).fАргументот се третира како пловечки број и се прикажува како пловечки број (свесен за локалот). FАргументот се третира како пловечки број и се прикажува како пловечки број (не свесен за локалот). gОпшт формат.
Нека P е еднакво на прецизноста ако е различно од нула, 6 ако прецизноста е изоставена или 1 ако прецизноста е нула. Потоа, ако конверзијата со стил E би имала експонент X:
Ако P > X ≥ −4, конверзијата е со стил f и прецизност P − (X + 1). Во спротивно, конверзијата е со стил e и прецизност P − 1.
GКако gспецификатор, но користиEandf.hКако gспецификатор, но користиF. Достапно од PHP 8.0.0.HКако gспецификатор, но користиEandF. Достапно од PHP 8.0.0.oАргументот се третира како цел број и се прикажува како октален број. sАргументот се третира и прикажува како стринг. uАргументот се третира како цел број и се прикажува како непотпишан децимален број. xАргументот се третира како цел број и се прикажува како хексадецимален број (со мали букви). XАргументот се третира како цел број и се прикажува како хексадецимален број (со големи букви). Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваНа
cспецификаторот за тип ги игнорира подлогата и ширината.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваОбидот за користење комбинација од спецификаторите за стринг и ширина со множества знаци што бараат повеќе од еден бајт по знак може да резултира со неочекувани резултати.
Променливите ќе бидат претворени во соодветен тип за спецификаторот:
Ракување со типови Тип Спецификатори string sint d,u,c,o,x,X,bfloat e,E,f,F,g,G,h,H -
За
values-
Вратени вредности
Враќа должина на излезниот стринг.
Errors/Exceptions
Од PHP 8.0.0, а ValueError се фрла ако бројот на аргументи е нула. Пред PHP 8.0.0, а E_WARNING беше емитирано наместо тоа.
Од PHP 8.0.0, а ValueError се фрла ако [width] е помало од нула или поголемо од PHP_INT_MAX. Пред PHP 8.0.0, а E_WARNING беше емитирано наместо тоа.
Од PHP 8.0.0, а ValueError се фрла ако [precision] е помало од нула или поголемо од PHP_INT_MAX. Пред PHP 8.0.0, а E_WARNING беше емитирано наместо тоа.
Од PHP 8.0.0, а ValueError се фрла кога се даваат помалку аргументи отколку што е потребно. Пред PHP 8.0.0, false беше вратено и а E_WARNING емитирано наместо тоа.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
Оваа функција повеќе не враќа false при неуспех.
|
| 8.0.0 |
Фрли а ValueError ако бројот на аргументи е нула; претходно оваа функција емитираше а E_WARNING instead.
|
| 8.0.0 |
Фрли а ValueError if [width] е помало од нула или поголемо од PHP_INT_MAX; претходно оваа функција емитираше а E_WARNING instead.
|
| 8.0.0 |
Фрли а ValueError if [precision] е помало од нула или поголемо од PHP_INT_MAX; претходно оваа функција емитираше а E_WARNING instead.
|
| 8.0.0 |
Фрли а ValueError кога се даваат помалку аргументи отколку што е потребно; претходно оваа функција емитираше а E_WARNING instead.
|
Примери
Пример #1 vprintf()Врати вредности од низата како форматиран стринг според
<?php
vprintf("%04d-%02d-%02d", explode('-', '1988-8-1'));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
1988-08-01
Види Исто така
- printf() Излез на стринг
- sprintf() - Врати форматирана низа
- fprintf() - Запиши форматирана низа во поток
- vsprintf() - Врати форматирана низа
- vfprintf() - Запиши форматирана низа во поток
- sscanf() - Парсирај влез од низа според формат
- fscanf() - Парсира влез од датотека според формат
- number_format() - Заокружи дропки надолу
- date() - Форматирај Unix временски печат
Белешки од корисници 8 белешки
Using the ... operator, vprintf($format, $array) is basically just printf($format, ...$array).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.<?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.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.";
?>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.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 recodingFor 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.