За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Возврат отформатированной строки функцией sprintf

Май13
Качественная стяжка пола разными способами и материалами.

SprintfВек живи — век учись (народная мудрость)
При внимательном чтении документации PHP, функции sprintf наткнулся на то, что доступ к одинаковым параметрам можно получить через указания номера параметра этой ф-ции.

Рассмотрим несколько примеров.

Во всех примерах я хочу вывести строку  Мой персональный блог <a href=»http://blog.nagaychenko.com»>http://blog.nagaychenko.com</a>

Пример 1:

$string = 'Мой персональный блог <a href="%s">%s</a>';
echo sprintf($string, 'http://'.$_SERVER['HTTP_HOST'].'/blog');

Получаем ответ

Warning: sprintf(): Too few arguments in D:\www\test\index.php on line 3

Как видно я хочу заменить ключи %s на ‘http://’.$_SERVER[‘HTTP_HOST’].’/blog’ в двух местах, но в ф-ции значение для второго ключа не передано, следовательно произошла ошибка.

Пример 2:

$string = 'Мой персональный блог <a href="%s">%s</a>';
echo sprintf($string, 'http://'.$_SERVER['HTTP_HOST'].'/blog', 'http://'.$_SERVER['HTTP_HOST'].'/blog');

Получаем ответ

Мой персональный блог <a href="http://blog.nagaychenko.com">http://blog.nagaychenko.com</a>

В этом примере все прошло корректно, но мне дважды пришлось писать одно и тоже значение ‘http://’.$_SERVER[‘HTTP_HOST’].’/blog’, а если таких значений куда больше чем 2? Получается не очень красиво и можно сильно попасть при смене строки с ключами. Особенно попадаем если ключи поменялись местами. Чтобы такого не было, можно использовать третий пример.

Пример 3:

$string = 'Мой персональный блог <a href="%1$s">%1$s</a>';
echo sprintf($string, 'http://'.$_SERVER['HTTP_HOST'].'/blog');

Получаем ответ

Мой персональный блог <a href="http://blog.nagaychenko.com">http://blog.nagaychenko.com</a>

Обратите внимание на %1$s и %1$s — это теже ключи, что и %s, но в них теперь указывает порядковый номер параметра переданный в ф-цию.
Еще одно замечание, если юзаете двойные кавычки, то перед знаком доллара необходимо ставить экранирующий слешь «%1\$s».

Как видно 2-й и 3-й вариант более правильный, но лучше использовать вариант номер 3!


Ниже приведено описание ф-ции из мануала:

Описание

string sprintf ( string $format [, mixed $args ] )

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

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

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

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

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

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

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

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

Статья просмотренна 46526 раз, зашло посетителей 12832

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Май 2010
Пн Вт Ср Чт Пт Сб Вс
« Апр   Июн »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Сейчас на сайте