Функция ввода данных printf в php. Функции форматного вывода в PHP. Формирование строки форматирования

printf ("как форматировать", парметр1, параметр2, ...) -- выводит результат на экран

$result=sprintf ("..", .., .., ...) - тоже самое, только строка не выводиться, а помещается в $result

Цитата из перевода мануала (ПРИМЕРЫ ниже:-):

sprintf

sprintf -- возвращает форматированную строку
Описание
sprintf (string format, mixed ...);

Возвращает строку, обрабатываемую в соответствии с форматирующей строкой format .

Форматирующая строка, содержащая ноль или более директив: обычные символы (кроме %) которые копируются прямо в результат, и that are copied directly to the result, и описания изменений , каждое из которых выполняет определенные действия. Это применительно и к sprintf() и к printf()

Каждое описание изменений состоит из следующих элементов, в порядке:

    Дополнительный описатель заполнения , который говорит, какие символы будут использоваться для заполнения результата до правильног размера строки. Это могут быть пробелы или 0 (символ нуля). По умолчанию заполняется пробелами. Алтернативный символ заполнения может быть определен одинарной кавычкой ("). См. примеры ниже.

    Дополнительный описатель выравнивания , который говорит, что результат должен быть выравнен по левому или по правому краю. По умолчанию выравнивание происходит по правому краю; символ - приведет к вырвниванию по левому краю.

    Дополнительный описатель ширины , который говорит, с каким количеством символов (минимум) пожет производится данная замена.

    Дополнительный описатель точности , который говорит, сколько десятичных знаков следует отображать для чисел с плавающей точкой. Этот описатель не действует на остальные типы, кроме double. (другая полезная функция для форматирования чисел это number_format() .)

  1. Описатель типа , который говорит о том, как тип данных аргумента должен трактоваться. Возможные типы:

    % - символ процента. Аргумент не требуется.
    b - аргумент трактуется как integer и представляется как двоичное число.
    c - аргумент трактуется как integer и представляется как символ с ASCII значением.
    d - аргумент трактуется как integer и представляется как десятичное число.
    f - аргумент трактуется как double и представляется как число с плавающей точкой.
    o - аргумент трактуется как integer и представляется как восьмиричное число.
    s - аргумент трактуется и представляется как строка.
    x - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в нижнем регистре).
    X - аргумент трактуется как integer и представляется как шестнадцатиричное число (с буквами в верхнем регистре).
Примеры

Пример 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 <<<

Другие примеры смотрим тут:

Стандартная функция консольного вывода в языке C - printf. Описание её содержится в заголовочном файле stdio.h. При помощи этой функции можно выводить данные или пользовательские сообщения в консоль. Язык C чувствителен к регистру. К примеру, две функции printf и scanf отличаются от подобных им Printf и Scanf. Все символы в функциях printf и scanf также должны быть записаны в нижнем регистре. Одним из простейших примеров C printf, выводящим на экран знакомое приветствие hello world, является:

Определение функций группы printf в файле "stdio.h"

Файл "stdio.h" относится к стандартной библиотеке ввода/вывода в языке С. Описание printf и подобных ей функций приводится в нём следующим образом:

Перечисленные функции производят загрузку данных из определённых локаций, преобразовывают их в символьную строку, отправляют в заданные потоки вывода.

Семейство функций printf

Функции группы printf в языке C служат для обработки и форматированного вывода данных в стандартный поток. Причём функции printf и vprintf производят запись в стандартный поток stdout, функции fprintf и vfprintf отправляют значения выводимых аргументов в некоторый заданный выходной поток, а snprintf, sprintf, vsnprintf и vsprintf записывают данные в символьную строку. Все перечисленные функции работают с использованием строки формата, указывающей необходимые преобразования аргументов для вывода.

Функция fprintf записывает результат в выходной поток stream. В буфер, представляющий собой символьную строку, выводит результат функция sprintf. Поведение функции не определено, если подлежащая выводу строка превышает размер массива буфера.

Функция snprintf так же, как и предыдущая, записывает данные в строковый буфер. Полученная строка символов завершается нулевым символом, если только bufsz (размер буфера) не равен нулю. Иначе, если значение bufsz равно нулю, то в буфер ничего не выводится, а сам буфер вполне может являться нулевым указателем, но возвращаемое значение (количество байтов, которое должно было быть записано) все равно вычисляется.

Функция printf_s в целом действует тем же образом, что и printf, за исключением одного момента. Главным отличием в описании printf_s в C и printf является следующее: функция printf_s выполняет проверку строки форматирования на наличие допустимых символов в отличие от printf, которая только проверяет строку формата на предмет пустого указателя.

Подробнее рассмотрим функцию printf.

Общее описание

В языке C печать символов через стандартный поток вывода осуществляется посредством вызова функции printf. Команда printf в C форматирует набор выводимых данных, и они отправляются в стандартный поток вывода stdout. Значения, переданные в качестве аргументов функции, выводятся в консоль согласно указанной строке форматирования, которая в свою очередь заключает в себе две разновидности элементов. Первая разновидность - это символы, выводимые на экран, а элементы, определяющие особенности формата данных и отвечающие за метод представления аргументов при выводе, относятся ко второму виду.

При выводе переменных с printf в C особые комбинации символов в строке аргументов заменяются на преобразованные в соответствии с этими символами данные, причём для каждого типа данных существуют свои спецификации формата вывода.

Тип функции и возвращаемое значение

Функция printf, имеющая возвращает целочисленную величину, обозначающую количество напечатанных на экране символов. К примеру, можно присвоить:

int k = printf("Привет %c %d %s", "a", 11, "всем!"),

и тогда по значению переменной k легко определяется, возникла ли ошибка при выводе. В случае возврата отрицательного значения (если функция вернула "-1") можно сделать вывод, что произошла ошибка при её выполнении.

Синтаксис и зависимости

Чтобы использовать функцию printf, требуется подключить заголовочный файл "stdio.h" следующим образом:

#include

Шаблон функции выглядит:

int printf(const char *формат, ...)

Под многоточием подразумевается список аргументов, подлежащих выводу. Функция printf может быть использована с различным числом аргументов, но первый из них всегда ограничивается с обеих сторон двойными кавычками, а каждый последующий необходимо отделять от предыдущего запятой. То, что записано в двойных кавычках и при том не является спецификацией формата, печатается без изменений, иначе, если встретился спецификатор, копируется тип его значения.

Форма задания спецификаций формата:

%[флаги][ширина][.позиция][длина]тип

Форматирование с printf в C выходных значений

Чтение строки формата, указываемой в круглых скобках после имени вызываемой функции, происходит только в одну сторону: слева направо, и первый аргумент, указанный после самой этой строки, выводится лишь в том случае, если встретилась первая спецификация. До тех пор, пока не кончится строка формата, указанные в ней спецификации будут инициировать преобразование и печать последующих аргументов. В строке формата знак пробела рассматривается, как обычный символ и передаётся на вывод в случаях, когда он не используется в выражении спецификации формата.

Символ "%" указывает на начало спецификации формата вывода, следом за ним идёт код формата. Все поля в спецификации представляют собой отдельные, определяющие условия форматирования числа или символы.

Форматированный вывод printf в C обладает своими особенностями. В случае, если количество перечисленных аргументов превышает число спецификаций формата, они пропускаются и не выводятся. Иначе, если спецификаций формата больше, чем значений в списке подлежащих печати аргументов, результат вызова функции не определяется.

Для явного указания, который по счёту аргумент нужно задействовать, возможно использовать "%m$" вместо "%" и "*m$" вместо "*", причём m, целочисленное десятичное значение, обозначает позицию нужного аргумента (индексирование начинается с единицы).

Параметры

Флаги, используемые в строке формата
Флаг Описание
- Выравнивание результата по левому краю в поле вывода
+ При выводе численного значения, имеющего знак, принудительно печатается "+" перед положительной величиной (по умолчанию выводится только "-" перед отрицательным значением)
0 Для целых чисел и чисел с плавающей запятой ведущие нули используются вместо символов пробела для заполнения левых разрядов в случае, если задана ширина поля, превышающая длину числа. Для целых чисел флаг игнорируется, если явно указана точность. Для других преобразований с использованием этого флага поведение функции не определено. Флаг "0" не учитывается, если присутствует флаг "-"
space Если результат вывода выражения, имеющего знак, не начинается с символа этого знака или пуст, то пробел добавляется к результату. Флаг "space" игнорируется, если присутствует флаг "+"
# Выполняется альтернативная форма преобразования

Различные спецификаторы формата

Спецификатор формата Использование и описание для printf C Тип аргумента
% Запись литерала "%"
c Вывод одного символа. Происходит преобразование аргумента в тип unsigned char. При использовании модификатора "l" аргумент преобразуется в строку символов unsigned char
s Печать строки символов. Аргумент должен являться указателем на начальный элемент массива символов char char *
d
i
Вывод десятичного представления целочисленного значения со знаком int
o Вывод восьмеричного представления без знакового целочисленного значения unsigned int
x
X
Вывод шестнадцатеричного представления без знакового целочисленного значения. Символы "a", "b", "c", "d", "e", "f" применяются для преобразования "x". А для преобразования "X" - "A", "B", "C", "D", "E", "F" unsigned int
u Вывод десятичного преобразования без знакового целочисленного значения. Если преобразованное значение и точность вместе равны 0, то символы не выводятся unsigned int
f
F
Вывод десятичного представления числа с плавающей запятой, имеющего знак double
e
E
Вывод десятичного экспоненциального представления округлённого и преобразованного так, что перед запятой остаётся одна цифра, а количество цифр после запятой соответствует точности представления (по умолчанию точность равна 6, а если указан 0, то символ запятой не выводится вообще). Символ "е" выводится в верхнем или нижнем регистре в зависимости от преобразования double
a
A
Вывод шестнадцатеричного представления числа с плавающей запятой double
g
G
Вывод десятичного представления числа с плавающей запятой или его десятичного экспоненциального представления в зависимости от значения и точности double
n Возврат числа элементов, выведенных функцией printf. Результат записывается в переменную, на которую указывает аргумент. Спецификация может не содержать флагов, ширины поля или точности int *
p Вывод указателя void *

Модификатор ширины поля

В строке формата в printf C может быть записано целое число после знака процента и перед командой форматирования. Оно является модификатором ширины поля и влияет на представление отображаемых данных. Наименьшая ширина поля, предназначенная для значения, определяется этим числом, и присутствие такого модификатора в случае, если аргумент оказывается меньше выделенного ему поля, вызывает добавление к результату пробелов или нулей. Заполнителем по умолчанию служит символ пробела, однако можно установить ноль, прописав его перед спецификацией ширины. Модификатор указывает минимум ширины, и любое превышающее этот минимум значение будет напечатано без помех. Число, к примеру, состоящее менее чем из восьми символов и печатаемое со спецификацией "%08d", окажется дополненным до необходимых восьми знаков нулями.

Подобные модификаторы могут также задавать параметры точности или выравнивания.

Модификатор точности

Модификатор точности служит для определения числа печатаемых десятичных знаков в представлении чисел. Для добавления модификатора точности необходимо поставить точку после спецификации ширины поля и указать нужное значение точности после неё. Модификатор точности определяется для "e", "f", "a", "E", "A" и "F" форматов. Для целых чисел модификатор устанавливает количество отображаемых цифр, добавляя нули в левый разряд, если нужно, а при выводе рациональных чисел определяет необходимое количество знаков после запятой. Применительно к строковым переменным: следующее после точки число в модификаторе точности служит определителем максимальной длины поля при выводе. К примеру, при заданной спецификации формата "%4.8s" будет выведена строка, длина которой находится в диапазоне от четырёх до восьми символов, в случае превышения крайние символы будут опущены.

Другие модификаторы формата

Выравниванием по умолчанию является выравнивание по правому краю, однако это можно изменить, поставив знак "-" после "%". Такая спецификация формата устанавливает выравнивание по левому краю.

Кроме того, функция printf способна различать короткие и длинные типы выводимых целых значений. Допустимые спецификаторы: "о", "d", "u", "i", "x" и "X". Длинный тип значения устанавливается модификатором "l", а короткий - модификатором "h". Например, при выводе длинного целого числа и значения типа short unsigned int спецификации формата выглядят как "%ld" и "%hu" соответственно.

Примеры

1. Описание printf C и результаты вызова каждой функции:

2. Вывод на экран простого диалогового сообщения:

printf("сообщение");

3. Программный код:

Выражения, заданные в перед спецификациями формата, печатаются на экране, также как и следующие за строкой формата аргументы. Результат выполнения приведённых выше функций printf C, описание выходных данных:

Данный пример иллюстрирует вывод на экран при помощи различных форматов строк, целочисленных переменных, символов, а также чисел с плавающей точкой.

Стандартная функция ввода scanf и примеры её использования

Функция scanf используется для чтения вводимых с клавиатуры данных. Описание printf и scanf в C представлено в заголовочном файле "stdio.h".

scanf("format specifiers",&value1,&value2, ...);

Простой пример работы с функцией scanf:

#include

Для форматного вывода в PHP используются две замечательных функции: printf() и sprintf() . У них достаточно много возможностей, которые мы обсудим в этой статье.

Сразу скажу, что разница между printf() и sprintf() лишь в том, что первая выводит строку сразу в выходной поток (например, в браузер), а вторая возвращает её.

Параметр функции - это строка, которая имеет символы с %, называемые спецификаторами , и символы без %, называемых директивами . Директивы остаются неизменными при форматировании, а вот спецификатор приводит к подстановке других параметров функций (следующих за строкой с форматом).

Всего имеется несколько спецификаторов, которые объединяются в одну группу (один общий % ), порядок которых следующий:

  1. Спецификатор заполнения . Позволяет заполнить строку до заданного размера конкретным символом. По умолчанию этим символом является пробел.
  2. Спецификатор выравнивания . Данный спецификатор позволяет задать выравнивание строки по правому краю (по умолчанию), либо по левому краю (если указать "- ").
  3. Спецификатор минимальной ширины . Если результат будет иметь меньшую длину строки, то она будет заполнена символами из спецификатора заполнения до указанной ширины.
  4. Спецификатор точности . Позволяет указать, какое количество знаков после запятой оставить у числа с плавающей точкой.
  5. Спецификатор типа . Этот спецификатор указывает тип выводимых данных. Их там 8 штук, но на практике используются следующие:
    • d - целое число в десятичном виде.
    • f - число с плавающей точкой в десятичном виде.
    • s - строка.

Давайте разберём классический пример по выводу отформатированной даты :

$year = 2012;
$month = 9;
$day = 28;
printf("Дата написания статьи: %02d.%02d.%04d", $day, $month, $year);
?>

Нетрудно догадаться, что в результате будет выведена такая строка: "Дата написания статьи: 28.09.2012 ". Обратите внимание, сколько групп спецификаторов, столько и параметров передаётся помимо самого формата. Строка "Дата написания статьи: " является директивой, и она остаётся без изменений. Теперь разберём для примера вторую группу спефикаторов, которая отвечает за месяц. Другие группы абсолютно идентичны.

  • %
  • 0 - символ, которым заданный параметр будет заполняться до требуемой ширины.
  • 2 - минимальная ширина. Соответственно, если длина строки меньше, то она будет заполнена 0 .
  • d - выводиться будет как целое число. Если поставить, например, b (ещё один спецификатор типа), то выведится это же число, но в двоичной форме.

Приведу ещё один популярный пример использования функции printf (и sprintf()) , связанный с окргулением чисел:

$x = 12.596123;
printf("%06.2f", $x); // Будет выведено "012.60"
?>

Давайте разберём первый аргумент функции printf() :

  • % - начало группы спецификатора.
  • 0 - символ заполнения до требуемой длины.
  • 6 - требуемая длина (точка, безусловно, также входит в эту длину).
  • .2 - точность до 2-х знаков после запятой.
  • f - тип чисел с плавающей точкой. Собственно, округление имеет смысл только для этого типа.

Как видите, функции printf() и sprintf() позволяют легко решать, на первый взгляд, достаточно сложные задачи. Поэтому Вам обязательно нужно иметь их в своём арсенале.

Выводит строку, значение переменной или выражение.
Синтаксис:

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 "
$first
$last
n";

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

(PHP 4, PHP 5, PHP 7)

sprintf — Возвращает отформатированную строку

Список параметров

Строка формата состоит из нуля и более директив: обычных символов (за исключением % ), которые копируются напрямую в результирующую строку, и описателей преобразований , каждый из которых заменяется на один из параметров. Это относится как к sprintf() , так и к printf() .

Каждый описатель преобразований состоит из знака процента (% ), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):

  1. Необязательный описатель знака , указывающий как знак (- или +) будет применен к числу. По умолчанию, используется только знак минус, если число отрицательное. Этот описатель заставляет положительные числа также отображать знак плюс, он был добавлен в PHP 4.3.0.
  2. Необязательный описатель заполнения , который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0 . По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (" ). См. примеры ниже.
  3. Необязательный описатель выравнивания , определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
  4. Необязательное число, описатель ширины , определяющий минимальное число символов, которое будет содержать результат этого преобразования.
  5. Необязательный описатель точности , указанный в виде точки ("."), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа.
  6. Описатель типа , определяющий, как трактовать тип данных аргумента. Допустимые типы:

    • % - символ процента. Аргумент не используется.
    • 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 символов
?>