Меню
Безкоштовно
Головна  /  Поради/ PHP sprintf: форматування та обробка рядків. Функції форматного виведення у PHP Printf php приклади

PHP sprintf: форматування та обробка рядків. Функції форматного виведення у PHP Printf 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-я система: 02 : 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Друк рядків символів. Аргумент повинен бути вказівником на початковий елемент масиву символів charchar *
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

Виводить рядок, значення змінної чи вираз.
Синтаксис:

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 = "765t Lewis 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(), і 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() повертає відформатоване число. Функція приймає один, два чи чотири аргументи (не три):

Якщо передано лише один аргумент, число буде відформатовано без дробової частини, але з комою (",") між групами цифр по 3.

Якщо передано два аргументи, число буде відформатовано з decimals знаками після точки (".") і з комою (",") між групами цифр по 3.

Якщо передані всі чотири аргументи, число буде відформатовано з 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 sprintf дозволяє перетворити та розмістити деяку кількість аргументів в одному рядку символів. Специфікатори форматування дозволяють працювати з символами, рядками, цілими та речовими числами.

Застосування функції потрібне для оформлення табличної інформації та створення шаблонів. Може бути використане для попередньої формалізації вихідних даних у певній структурі, зміни їх змісту або послідовності.

Синтаксис функції PHP sprintf()

Результат функції - рядок символів, сформований у певній послідовності з конкретних даних, параметри функції:

  • рядок форматування;
  • список аргументів.

Для форматування можна використовувати будь-яку конструкцію та логіку, включаючи теги HTML. Хоча немає жодних обмежень на застосування sprintf, посібник з PHP визначає специфікатори перетворення переважно до числової інформації.

Елемент формату починається із символу % та закінчується символом специфікатора. Більшість можливостей форматування лежить у сфері числової інформації. Дуже практична можливість перетворити число на двійковий і шістнадцятковий формати. Тут функції sprintf на PHP навряд чи варто писати заміну.

У наведеному прикладі особливо виділено правило іменування аргументів та відмінності специфікатора x від X. Правильне використання посилань на послідовність аргументів, які форматуються, має значення для правильного результату. Нумерація завжди починається з першого.

Послідовність використання посилань не має значення, але важливо пам'ятати: PHP функція sprintf усі елементи % (без вказівки номера аргументу) розглядає послідовно у загальному списку. До нумерації загального списку жодного відношення не має ні кількість, ні послідовність елементів %, вказаних із конкретними номерами параметрів.

Опис прикладу застосування sprintf у PHP

Якщо керувати аргументом у вигляді рядка немає прямої можливості, то керувати рядком формату та виведенням у рядок результату цифрової інформації не становить проблеми.

У перших двох рядках прикладу (висновок аргументів Arg1, Arg2c та Arg2p) перший аргумент - рядок (найменування позиції) виводиться як є. Третій аргумент займає виведення 12 (14) символів. Перший рядок вирівнює число зліва нулями до загальної довжини 12 символів. Після крапки чотири символи. Другий рядок вирівнює число праворуч (дрібну частину) до 14 символів. Ознакою, що потрібно виконувати вирівнювання праворуч, є символ -.

Рядок форматування – це звичайний рядок символів. У неї можна вставляти вирази, що обчислюються. У цьому випадку виділення іншого числа використані вставки ($cL) і ($cR). Це зробило рядок форматування наочнішим і спростило його запис за всіма прикладами.

Формування рядка форматування

Робота PHP російською, або функція sprintf, - робота інтерпретатора в природному та зручному середовищі. Власне, HTML-сторінка зі вставками PHP-коду є будь-яким контекстом на будь-якій мові. Це не та свобода, яку дає мова JavaScript у середовищі браузера.

Щоб вивести російську контент на PHP, не потрібно кодувати кирилицю, але іноді доводиться використовувати функцію перетворення iconv (). У будь-якому випадку все доступне та читальне.

Текст вставки PHP-коду в HTML-сторінку зрозумілий і потрібний. Застосування у рядку символів:

Значення змінної ABC=($ABC) одиниць

Вставка ($ABC) має значення лише один раз і виконується лише один раз.

Особливість виконання PHP-коду на сторінці

Інтерпретатор тільки один разпереглядає сторінку та тільки один раззамінює вставки ($ABC) їх значеннями. Програміст може, на свій розсуд, застосовувати фразу "тільки один раз",змушуючи PHP багаторазово наближатися до потрібного результату.

У будь-якому випадку, як тільки HTML-сторінка відправлена ​​до браузера, в ній немає PHP-коду.

Якщо елемент сторінки з браузера ініціював контакт із сервером, він може запустити новий PHP-скрипт. Тут вставки ($ABC) дуже відносні, і немає гарантії правильного результату. Але застосування в PHP sprintf – це динаміка такої можливості.

Розробник може не тільки отримати бажане виконання такої вставки, але й змінити рядок, в який вона передаватиме потрібне значення.

Момент формування контенту

Використання потенціалу PHP як засобу формування вставок HTML-сторінку, як інструменту формування сторінки цілком - природно. Із цього починається сайт. Як тільки сторінку сформовано, а фактично на сайт прийшов відвідувач, то за сучасними уявленнями:

  • сторінку міняти не можна;
  • користувача упускати тежне можна.

Фактично відвідувач прийшов на сайт і отримав першу відповідь у вигляді HTML-коду. Цілком неправильно змінювати цю відповідь - це означає сказати відвідувачеві, що сторінка її змінює. Але реагувати на дії відвідувача адекватно та за його ініціативою сторінка зобов'язана.

Прихід відвідувача – перша відповідь. Дія відвідувача - адекватна реакція сторінки та її підготовка до всіх можливих наступних дій відвідувача.

Значна частка відповідальності за динаміку сторінки за ініціативою відвідувача лягає на JavaScript, але він функціонує лише у браузері, а на сервер може надсилати лише AJAX-запити. Будь-яке звернення до сервера може запускати PHP-скрипт. Але момент формування сторінки та момент реакції на запит суттєво різняться.

Функція PHP sprintf – ідеальний засіб для динамічного формування шаблону відповіді та заповнення його потрібним значенням.

Зміна PHP-коду під час виконання

Ідея динаміки коду народилася разом із першою мовою програмування і сьогодні присутня у кожній сучасній мові програмування.

Виконання коду за допомогою eval (рядок коду) сьогодні вважається брехнею в безпеці, але вона настільки ж потрібна, наскільки і небезпечна.

Щоб змінити код у процесі виконання, сьогодні не обов'язково скористатися функцією eval(). Це швидше швидкий сніданок, виконання однієї-двох команд, аніж практичний фундамент для побудови потрібної динаміки.

Функція PHP sprintf() дозволяє проектувати шаблон скрипта, наприклад код об'єкта, який буде викликаний при тій чи іншій дії відвідувача. Практика, що склалася, записувати тіла об'єктів у вигляді незалежних файлів - ідеальне рішення для їх зміни в процесі роботи сайту.

Використання інструментів, що доповнюють функціональність sprintf(), дозволяє не тільки змінювати використовувані об'єкти в результаті дій конкретного відвідувача, але й переносити цю динаміку на роботу з іншими відвідувачами: це розвиток сайту, динаміка його функціональності, накопичення досвіду роботи та знань.

(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тип 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" %5 =0 %s = "43951789" %x = "29ea6ad" %X = "29EA6AD" %+d = "+43951789" %+d = "-43951789"

Приклад #8 printf(): описувачі рядків

$s = "monkey";
$ t = "багато 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 символів
?>