Неустрашимый print php

The sprintf() function writes a formatted string to a variable.

The arg1, arg2, ++ parameters will be inserted at percent (%) signs in the main string. This function works "step-by-step". At the first % sign, arg1 is inserted, at the second % sign, arg2 is inserted, etc.

Note: If there are more % signs than arguments, you must use placeholders. A placeholder is inserted after the % sign, and consists of the argument- number and "\$". See example two.

Syntax

sprintf(format,arg1,arg2,arg++ )


Parameter Description
format Required. Specifies the string and how to format the variables in it.

Possible format values:

  • %% - Returns a percent sign
  • %b - Binary number
  • %c - The character according to the ASCII value
  • %d - Signed decimal number (negative, zero or positive)
  • %e - Scientific notation using a lowercase (e.g. 1.2e+2)
  • %E - Scientific notation using a uppercase (e.g. 1.2E+2)
  • %u - Unsigned decimal number (equal to or greather than zero)
  • %f - Floating-point number (local settings aware)
  • %F - Floating-point number (not local settings aware)
  • %g - shorter of %e and %f
  • %G - shorter of %E and %f
  • %o - Octal number
  • %s - String
  • %x - Hexadecimal number (lowercase letters)
  • %X - Hexadecimal number (uppercase letters)

Additional format values. These are placed between the % and the letter (example %.2f):

  • + (Forces both + and - in front of numbers. By default, only negative numbers are marked)
  • " (Specifies what to use as padding. Default is space. Must be used together with the width specifier. Example: %"x20s (this uses "x" as padding)
  • - (Left-justifies the variable value)
  • (Specifies the minimum width held of to the variable value)
  • . (Specifies the number of decimal digits or maximum string length)

Note: If multiple additional format values are used, they must be in the same order as above.

arg1 Required. The argument to be inserted at the first %-sign in the format string
arg2 Optional. The argument to be inserted at the second %-sign in the format string
arg++ Optional. The argument to be inserted at the third, fourth, etc. %-sign in the format string

Technical Details

Return Value: Returns the formatted string
PHP Version: 4+

More Examples

Example 2

Use of placeholders:

$number = 123;
$txt = sprintf("With 2 decimals: %1\$.2f
With no decimals: %1\$u",$number);
echo $txt;
?>

Run example »

Example 3

A demonstration of all possible format values:

$num1 = 123456789;
$num2 = -123456789;
$char = 50; // The ASCII Character 50 is 2

// Note: The format value "%%" returns a percent sign
echo sprintf("%%b = %b",$num1)."
"; // Binary number
echo sprintf("%%c = %c",$char)."
"; // The ASCII Character
echo sprintf("%%d = %d",$num1)."
"; // Signed decimal number
echo sprintf("%%d = %d",$num2)."
"; // Signed decimal number
echo sprintf("%%e = %e",$num1)."
"; // Scientific notation (lowercase)
echo sprintf("%%E = %E",$num1)."
"; // Scientific notation (uppercase)
echo sprintf("%%u = %u",$num1)."
"; // Unsigned decimal number (positive)
echo sprintf("%%u = %u",$num2)."
"; // Unsigned decimal number (negative)
echo sprintf("%%f = %f",$num1)."
"; // Floating-point number (local settings aware)
echo sprintf("%%F = %F",$num1)."
"; // Floating-point number (not local sett aware)
echo sprintf("%%g = %g",$num1)."
"; // Shorter of %e and %f
echo sprintf("%%G = %G",$num1)."
"; // Shorter of %E and %f
echo sprintf("%%o = %o",$num1)."
"; // Octal number
echo sprintf("%%s = %s",$num1)."
"; // String
echo sprintf("%%x = %x",$num1)."
"; // Hexadecimal number (lowercase)
echo sprintf("%%X = %X",$num1)."
"; // Hexadecimal number (uppercase)
echo sprintf("%%+d = %+d",$num1)."
"; // Sign specifier (positive)
echo sprintf("%%+d = %+d",$num2)."
"; // Sign specifier (negative)

В прошлый раз мы разбирали с вами тему массивов в php , а сегодня мы с Вами разберем функцию, которая называется print_r() . Данная функция является отладочной, и предназначена нам для того, чтобы мы могли в удобном виде просмотреть информацию о переменной. Почему я вначале темы затронул массивы, а это потому, что лучше всего при помощи этой функции просматривать массивы. Сейчас Вы в этом убедитесь.

$array = array(5 , 23 , "Denis" ) ;
print_r($array) ;
?>

Мы использовали массив из прошлого урока, и применили к нему функцию print_r . Показывать результат выполнения этой функции я не вижу смысла, просто напишите этот код и посмотрите результат в браузере. Там мы увидим, ключевое слово Array , и в скобках будут последовательно перечисляться индексы и их значения. Таким образом, мы можем просматривать даже самые большие массивы при помощи одной строчки. Это все, что я хотел рассказать про эту функцию. Вот такая сегодня получилась маленькая, легкая, а самое главное полезная статья. До скорой встречи!

Тех, кто считает себя профессиональным программистом на PHP. Руководство пользователя осторожно упоминает об имеющемся различии, но отсылает к статье стороннего авторства ; та, в свою очередь, утверждает, что echo быстрее, но не приводит доказательств; трудно найти объективное сравнение, и всё это придаёт проблеме некий мистический ореол, на что клюют многие и многие.

Так не будем же оставаться в стороне и постараемся раз и навсегда разгадать эту загадку!

Поведенческое различие echo и print заключается в том, что последний может вести себя как функция (всегда возвращающая единицу); вследствие этого print можно использовать в контексте, например, тернарного оператора, что иногда может быть весьма привлекательным. Echo как функцию использовать нельзя, зато она может принимать несколько аргументов через запятую, при этом их нельзя брать в скобки; тогда как у print ровно один аргумент, и он может быть как в скобках, так и без.

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

Для проведения испытаний я составил стенд, на котором 1000 раз выводятся 1000 строк (длиной 32 символа каждая); при этом используется один из пяти методов:

  1. print "$value
    ";
  2. echo "$value
    ";
  3. print $value . "
    ";
  4. echo $value . "
    ";
  5. echo $value, "
    ";

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

Были получены следующие величины:

  1. 1,727 с
  2. 1,727 с
  3. 1,462 с
  4. 1,428 с
  5. 1,321 с

Действительно, мы видим что print может оказаться немного медленнее echo (а может и не оказаться, что демонстрируют результаты по первым двум методам). В то же время использование echo с несколькими параметрами взамен конкатенации (и одинарными кавычками вместо двойных) даёт весьма ощутимый выигрыш в производительности.

Но постойте, на самом ли деле он такой ощутимый? Давайте подсчитаем. Разница между минимальным и максимальным временем составляет 406 мс на миллион операций. То есть, как сейчас модно говорить, 406 наносекунд на одну операцию .

Что это нам даёт в масштабах - ну, скажем, «ВКонтакте»? По данным LiveInternet, ежедневно на нём просматривается 500 млн. страниц .

Сколько раз для каждой страницы вызывается echo или print? Современные успешные сайты обязательно прибегают к сколько-нибудь высокому уровню абстракции логики от представления, используя шаблоны, MVC и другие страшные слова; в результате операция вывода вызывается один раз на страницу или, как максимум, один раз для каждого смыслового блока страницы. Предположим худший вариант и оценим количество таких блоков в 10 шт. на одну страницу.

Нетрудно подсчитать, что экономия серверного времени составит в лучшем случае до 200 секунд в день , или 0,23 %. Много это или мало? Решайте сами. Только сначала подумайте, не принесёт ли оптимизация одного SQL-запроса или кэширование одного файла в несколько раз больший прирост производительности.

А я скажу, сколько времени у меня заняло решение этого вопроса:

  1. Просмотр информации в мануале - 2 минуты.
  2. Составление бенчмарка - 31 минута.
    Серия пробных экспериментов - 5 минут.
    Корректирование техники и методики тестирования - 20 минут.
    Проведение испытаний - 9 минут.
    Обработка результатов - 5 минут.