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

(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 символов
?>

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

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

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

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

string sprintf (string format [, mixed args])

Возвращает строку, созданную с использованием строки формата format .

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

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

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

    Необязательный описатель выравнивания , определяющий выранивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.

    Необязательное число, описатель ширины , определяющий минимальное число символов, которое будет содержать результат этого преобразования.

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

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

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

Начиная с PHP 4.0.6 в строке формата поддерживается нумерация и изменение порядка параметров. Например:


Этот код выведет "There are 5 monkeys in the tree". Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:

Пример 2. Изменение порядка параметров

$format = "The %s contains %d monkeys" ;

?>
Появляется проблема: порядок описателей преобразования не соответствует порядку аргументов. Мы не хотим менять код, и нам нужно указать, какому аргументу соответствует тот или иной описатель преобразования.

Пример 3. Изменение порядка параметров

$format = "The %2\$s contains %1\$d monkeys" ;
printf ($format , $num , $location );
?>
Нумерация аргументов имеет еще одно применение: она позволят вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.