(PHP 4, PHP 5, PHP 7)
sprintf — Возвращает отформатированную строку
Список параметров
Строка формата состоит из нуля и более директив: обычных символов (за исключением % ), которые копируются напрямую в результирующую строку, и описателей преобразований , каждый из которых заменяется на один из параметров. Это относится как к sprintf() , так и к printf() .
Каждый описатель преобразований состоит из знака процента (% ), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):
- Необязательный описатель знака , указывающий как знак (- или +) будет применен к числу. По умолчанию, используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс, он был добавлен в PHP 4.3.0.
- Необязательный описатель заполнения , который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0 . По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (" ). См. примеры ниже.
- Необязательный описатель выравнивания , определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
- Необязательное число, описатель ширины , определяющий минимальное число символов, которое будет содержать результат этого преобразования.
- Необязательный описатель точности , указанный в виде точки ("."), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.
Описатель типа , определяющий, как трактовать тип данных аргумента. Допустимые типы:
- % - символ процента. Аргумент не используется.
- b - аргумент трактуется как целое и выводится в виде двоичного числа.
- c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
- d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
- e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
- E - аналогично %e , но использует заглавную букву (например, 1.2E+2).
- f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
- F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 4.3.10 и PHP 5.0.3.
- g %e и %f .
- G - выбирает самую краткую запись из %E и %f .
- o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
- s - аргумент трактуется как строка.
- u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
- x - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
- X - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).
Переменные будут преобразованы в соответвующий тип для спецификатора:
Тип | Спецификатор |
---|---|
string | s |
integer | d , u , c , o , x , X , b |
double | g , G , e , E , f , F |
Внимание
Попытка использовать комбинацию строк и спецификаторов ширины с кодировками, которые требуют более одного байта на символ, может привести к неожиданным результатам.
В строке формата поддерживается нумерация и изменение порядка параметров. Например:
Пример #1 Изменение порядка параметров
$num
=
5
;
$location
=
"дереве"
;
$format
=
"%d обезьян сидят на %s"
;
?>
Этот код выведет "5 обезьян сидят на дереве". Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:
Пример #2 Изменение порядка параметров
$format
=
"На %s сидят %d обезьян"
;
echo
sprintf
($format
,
$num
,
$location
);
?>
Появляется проблема: порядок описателей преобразования не соответствует порядку аргументов. Мы не хотим менять код, и нам нужно указать, какому аргументу соответствует тот или иной описатель преобразования.
Пример #3 Изменение порядка параметров
$format
=
"На %2$s сидят %1$d обезьян"
;
echo
sprintf
($format
,
$num
,
$location
);
?>
Нумерация аргументов имеет еще одно применение: она позволяет вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.
Пример #4 Изменение порядка параметров
$format
=
"На %2$s сидят %1$d обезьян.
Как здорово, когда на %2$s сидят %1$d обезьян."
;
echo
sprintf
($format
,
$num
,
$location
);
?>
При изменении порядка параметров описатель позиции n$ должен идти сразу за знаком процента (% ) прежде всех остальных описателей, как показано в примере ниже.
Пример #5 Указание дополняющего символа
echo
sprintf
("%".9d\n"
,
123
);
echo
sprintf
("%".09d\n"
,
123
);
?>
123 000000123
Пример #6 Использование описателя позиции и совместно с другими описателями
$format
=
"На %2$s сидят %1$04d обезьян"
;
echo
sprintf
($format
,
$num
,
$location
);
?>
Результат выполнения данного примера:
На дереве сидят 0005 обезьян
Замечание :
Попытка использовать спецификатор позиции, больший чем PHP_INT_MAX , приведет к генерации предупреждения функцией sprintf() .
Внимание
The c type specifier ignores padding and width
Возвращаемые значения
Возвращает строку, отформатированную в соответствии со строкой format .
Примеры
Пример #7 sprintf() : заполнение нулями
$n
=
43951789
;
$u
= -
43951789
;
$c
=
65
;
// ASCII 65 is "A"
// заметьте, двойной %% выводится как одинарный "%"
printf
("%%b = "%b"\n"
,
$n
);
// двоичное представление
printf
("%%c = "%c"\n"
,
$c
);
// выводит символ ascii, аналогично функции chr()
printf
("%%d = "%d"\n"
,
$n
);
// обычное целое число
printf
("%%e = "%e"\n"
,
$n
);
// научная нотация
printf
("%%u = "%u"\n"
,
$n
);
// беззнаковое целое представление положительного числа
printf
("%%u = "%u"\n"
,
$u
);
// беззнаковое целое представление отрицательного числа
printf
("%%f = "%f"\n"
,
$n
);
// представление числа с плавающей точкой
printf
("%%o = "%o"\n"
,
$n
);
// восьмеричное представление
printf
("%%s = "%s"\n"
,
$n
);
// строка
printf
("%%x = "%x"\n"
,
$n
);
// шестнадцатеричное представление (нижний регистр)
printf
("%%X = "%X"\n"
,
$n
);
// шестнадцатеричное представление (верхний регистр)
Printf
("%%+d = "%+d"\n"
,
$n
);
// описатель знака с положительным целым числом
printf
("%%+d = "%+d"\n"
,
$u
);
// описатель знака с отрицательным целым числом
?>
Результат выполнения данного примера:
%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"
Пример #8 printf() : описатели строк
$s
=
"monkey"
;
$t
=
"many monkeys"
;
Printf
("[%s]\n"
,
$s
);
// обычный вывод строки
printf
("[%10s]\n"
,
$s
);
// выравнивание вправо с пробелами
printf
("[%-10s]\n"
,
$s
);
// выравнивание влево с пробелами
printf
("[%010s]\n"
,
$s
);
// дополнение нулями также работает со строками
printf
("[%"#10s]\n"
,
$s
);
// использование собственного дополняющего символа "#"
printf
("[%10.10s]\n"
,
$t
);
// выравнивание влево с обрезкой в 10 символов
?>
printf ("как форматировать", парметр1, параметр2, ...) -- выводит результат на экран
$result=sprintf ("..", .., .., ...) - тоже самое, только строка не выводиться, а помещается в $result
Цитата из перевода мануала (ПРИМЕРЫ ниже:-):
sprintf
sprintf -- возвращает форматированную строкуОписание
sprintf (string format, mixed ...);Возвращает строку, обрабатываемую в соответствии с форматирующей строкой format .
Форматирующая строка, содержащая ноль или более директив: обычные символы (кроме %) которые копируются прямо в результат, и that are copied directly to the result, и описания изменений , каждое из которых выполняет определенные действия. Это применительно и к sprintf() и к printf()
Каждое описание изменений состоит из следующих элементов, в порядке:
Описатель типа , который говорит о том, как тип данных аргумента должен трактоваться. Возможные типы:
% - символ процента. Аргумент не требуется. b - аргумент трактуется как integer и представляется как двоичное число. c - аргумент трактуется как integer и представляется как символ с ASCII значением. d - аргумент трактуется как integer и представляется как десятичное число. f - аргумент трактуется как double и представляется как число с плавающей точкой. o - аргумент трактуется как integer и представляется как восьмиричное число. s - аргумент трактуется и представляется как строка. x - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в нижнем регистре). X - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в верхнем регистре).
Дополнительный описатель заполнения , который говорит, какие символы будут использоваться для заполнения результата до правильног размера строки. Это могут быть пробелы или 0 (символ нуля). По умолчанию заполняется пробелами. Алтернативный символ заполнения может быть определен одинарной кавычкой ("). См. примеры ниже.
Дополнительный описатель выравнивания , который говорит, что результат должен быть выравнен по левому или по правому краю. По умолчанию выравнивание происходит по правому краю; символ - приведет к вырвниванию по левому краю.
Дополнительный описатель ширины , который говорит, с каким количеством символов (минимум) пожет производится данная замена.
Дополнительный описатель точности , который говорит, сколько десятичных знаков следует отображать для чисел с плавающей точкой. Этот описатель не действует на остальные типы, кроме double. (другая полезная функция для форматирования чисел это number_format() .)
Примеры
Пример 2. sprintf: форматирование денежной еденицы $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; // echo $money will output "123.1"; $formatted = sprintf ("%01.2f", $money); // echo $formatted will output "123.10" ПримерыВсе то, что записано >>> между таких скобок <<< является результатом работы фукнции (т.е. пример вывода на экран) $s="MyString"; -> строка %s $f=12345.6789; -> дробное %f $d=12345; -> целое %d 10-я система: 0123456789 16числа %x 16-я система: 0123456789abcdef 16числа %X 16-я система: 0123456789ABCDEF 8числа %o 8-я система: 01234567 2числа %b 2-я система: 01 просто выводим число: printf("%d",$d); >>> 12345 <<< просто выводим 16число: printf("%X",123456789); >>> 75BCD15 <<< просто выводим 2число: printf("%b",$d); >>> 11000000111001 <<< просто выводим дробное число: printf("%f",$f); >>> 12345.6789 <<< дополнение чисел нулями: printf("%010d",$d); >>> 0000012345 <<< округление до 3х знаков после запятой: printf("%.3f",$f); >>> 12345.679 <<< просто выводим число + посторонний текст: printf("посторонний%dтекст",$d); >>> посторонний12345текст <<< вывод нескольких переменных - последовательное перечисление printf("%d-%f-%s",$d,$f,$s); >>> 12345-12345.678900-MyString <<< выравнивание (ширина 20 символов) по правому краю, пустоту заполняем "_": printf("%"_20s",MyString); >>> ____________MyString <<< выравнивание по левому краю, пустоту заполняем "x": printf("%-"x20s",MyString); >>> MyStringxxxxxxxxxxxx <<<Другие примеры смотрим тут: |
Выводит строку, значение переменной или выражение.
Синтаксис:
Print(string arg)
Функция print() выводит аргумент arg, в качестве которого может быть переменная или выражение.
vsprintf()
Возвращает отформатированную строку (PHP 4 >= 4.1.0, PHP 5)
Описание:
String vsprintf (string format, array args)
Эта функция подобна sprintf(), но она принимает не переменное число аргументов, а массив.
Производит вывод одного или нескольких значений.
Синтаксис:
Echo(string arg1, string ...)
Функция echo() выводит значения перечисленных параметров.
echo() - фактически языковая конструкция, поэтому для нее не обязательны скобки, даже если используется несколько аргументов.
echo "Перенос на следующую строку,имеющийся в коде, сохраняетсяи используется при выводе".
"чтобы избежать этого используйте".
"оператор конкатенации";
Вывод отформатированной строки.
Синтаксис:
Int printf(string format [, mixed args, ...]);
Делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.
Производит форматирование строки с подстановкой переменных.
Синтаксис:
Sprintf($format [,args, ...])
Эта функция возвращает строку, составленную на основе строки форматирования, содержащей некоторые специальные символы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.
Строка форматирования $format может включать в себя команды форматирования, предваренные символом %.
Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (то есть, символ % и следующие за ним команды) соответствуют одному, и только одному параметру, указанному после параметра $format. Если же нужно поместить в текст % как обычный символ, необходимо его удвоить:
Echo sprintf("The percentage was %d%%",$percentage);
Каждый спецификатор формата включает максимум пять элементов (в порядке их следования после символа %):
Необязательный спецификатор размера поля, который указывает, сколько символов будет отведено под выводимую величину.
В качестве символов-заполнителей (если значение имеет меньший размер, чем размер поля для его вывода)
может использоваться пробел или 0, по умолчанию подставляется пробел. Можно задать любой другой символ-наполнитель, если указать его в строке форматирования, предварив апострофом.
Опциональный спецификатор выравнивания, определяющий, будет результат выровнен по правому или по левому краю поля. По умолчанию производится выравнивание по правому краю, однако можно указать и левое выравнивание, задав символ - (минус).
Необязательное число, определяющее размер поля для вывода величины. Если результат не будет в поле, то он "вылезет" за края этого поля, но не будет усечен.
Необязательное число, которое предварено точкой ".", предписывающее, сколько знаков после запятой будет в результирующей строке.
Этот спецификатор учитывается только в том случае, если происходит вывод числа с плавающей точкой, в противном случае он игнорируется.
Наконец, обязательный (заметьте - единственный обязательный!) спецификатор типа величины, которая будет помещена в выходную строку:
b - очередной аргумент из списка выводится как двоичное целое число
c - выводится символ с указанным в аргументе кодом
d - целое число
f - число с плавающей точкой
o - восьмеричное целое число
s - строка символов
x - шестнадцатиричное целое число с маленькими буквами a-z
X - шестнадцатиричное целое число с большими буквами A-Z
Вот как можно указать точность представления чисел с плавающей точкой:
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1"...
$formatted = sprintf ("%01.2f", $money);
// echo $formatted выведет "123.10"!
Вот пример вывода целого числа, предваренного нужным количеством нулей:
$isodate=sprintf("%04d-%02d-%02d",$year,$month,$day);
Производит интерпретацию строки согласно формату и занесение значений в переменные.
Синтаксис:
Mixed sscanf(string str, string format [, string var1 ...])
Функция sscanf() является противоположностью функции printf().
Она интерпретирует строку str согласно формату format, аналогично спецификации printf().
При указании только двух аргументов полученные значения возвращаются в массиве.
// получение серийного номера$serial = sscanf("SN/235-0001", "SN/%3d-%4d");
echo $serial*10000+$serial; // выводит: 2350001
// и даты изготовления$date = "January 01 2000";
list($month, $day, $year) = sscanf($date, "%s %d %d");
echo "Дата: $year-".substr($month,0,3)."-$dayn";
// выводит: 2000-Jan-01
При указании дополнительных необязательных параметров (их следует передавать по ссылке)
функция возвращает их число. Те переменные, которые не получают значений, в возвращаемом значении не учитываются.
// генерируем XML запись из строки$auth = "765tLewis Carroll";
$n = sscan($auth,"%dt%s %s", &$id, &$first, &$last);
echo "
fprintf()
Описание:
Int fprintf (resource handle, string format [, mixed args])
Записывает строку, созданную с использованием строки формата format, в поток, дескриптор которого передается в handle. Аргумент format подробно рассмотрен в описании функции sprintf().
fprintf(): заполнение нулями
return;
fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
// запишет форматированную дату в файл date.txt
?>
fprintf(): форматирование денежных величин
if (!($fp = fopen("currency.txt", "w")))
return;
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1";
$len = fprintf($fp, "%01.2f", $money);
// строка "123.10" записана в файл currency.txt
echo "записано $len байт в файл currency.txt";
?>
vfprintf()
Записывает отформатированную строку в поток (PHP 5)
Описание:
Int vfprintf (resource handle, string format, array args)
Записывает строку, отформатированную в соответствии с format, в ресурс потока, указанный дескриптором handle. Форматирование осуществляется аналогично sprintf().
Работает так же, как и fprintf(), но принимает массив аргументов, а не переменное число аргументов.
Возвращает длину выведенной строки.
See also: printf(), sprintf(), sscanf(), fscanf(), vsprintf(), and number_format().
Examples
vfprintf(): zero-padded integers
if (!($fp = fopen("date.txt", "w")))
return;
vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// will write the formatted ISO date to date.txt
?>
vprintf()
Выводит отформатированную строку (PHP 4 >= 4.1.0, PHP 5)
Описание:
Int vprintf (string format, array args)
Выводит значения массива args, отформатированные в соответствии с аргументом format, описанном в документации функции sprintf().
Эта функция подобна printf(), но она принимает не переменное число аргументов, а массив.
Возвращает длину выведенной строки
number_format()
Форматирует число с разделением групп (PHP 3, PHP 4, PHP 5)
Описание:
String number_format (float number [, int decimals])
string number_format (float number, int decimals, string dec_point, string thousands_sep)
number_format() возвращает отформатированное число number. Функция принимает один, два или четыре аргумента (не три):
Если передан только один аргумент, number будет отформатирован без дробной части, но с запятой (",") между группами цифр по 3.
Если переданы два аргумента, number будет отформатирован с decimals знаками после точки (".") и с запятой (",") между группами цифр по 3.
Если переданы все четыре аргумента, number будет отформатирован с decimals знаками после точки и с разделитилем между группами цифр по 3, при этом в качестве десятичной точки будет использован dec_point, а в качестве разделителя групп - thousands_sep.
Используется только первый символ строки thousands_sep. Например, при передаче foo в качестве thousands_sep для форматирования числа 1000, number_format() возвращает 1f000.
Пример использования number_format()
Во Франции обычно используются 2 знака после запятой (","), и пробел (" ") в качестве разделителя групп. Такое форматирование получается при использовании следующего кода:
$number = 1234.56;
// английский формат (по умолчанию)
$english_format_number = number_format($number);
// 1,234
// французский формат
$nombre_format_francais = number_format($number, 2, ",", " ");
// 1 234,56
$number = 1234.5678;
// английский формат без разделителей групп
$english_format_number = number_format($number, 2, ".", "");
// 1234.57
Возвращает строку, созданную с использованием строки формата format .
Строка формата состоит из директив: обычных символов (за исключением %), которые копируются в результирующую строку, и описатели преобразований , каждый из которых заменяется на один из параметров. Это относится также к fprintf() , sprintf() и printf() .
Каждый описатель прреобразований состоит из знака процента (%), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):
Описатель типа , определяющий, как трактовать тип данных аргумента. Допустимые типы:
% - символ процента. Аргумент не используется. b - аргумент трактуется как целое и выводится в виде двоичного числа. c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII. d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком. e - аргумент трактуется как float и выводится в научной нотации (например 1.2e+2). u - аргумент трактуется как целое и выводится в виде десятичного числа без знака. f - аргумент трактуется как float и выводится в виде десятичного числа с плавающей точкой. o - аргумент трактуется как целое и выводится в виде восьмеричного числа. s - аргумент трактуется как строка. x - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в нижнем регистре букв). X - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в верхнем регистре букв).
Необязательный описатель заполнения , который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0 . По умолчанию используется пробел. Альтернативный символ может быть указан с помощью " . См. примеры ниже.
Необязательный описатель выравнивания , определяющий выранивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
Необязательное число, описатель ширины , определяющий минимальное число символов, которое будет содержать результат этого преобразования.
Необязательный описатель точности , определяющий, сколько десятичных разрядов отображать для чисел с плавающей точкой. Имеет смысл только для числовых данных типа float . (Для форматирования чисел удобно также использовать функцию number_format() .)
Начиная с PHP 4.0.6 в строке формата поддерживается нумерация и изменение порядка параметров. Например:
Пример 2. Изменение порядка параметров
|
Пример 3. Изменение порядка параметров
|